July 29, 2011

Ruzik Ruzik
Lab Rat
293 posts

got off the encoding

 

Hellow, i have some problem:
if a try to do it:

  1. textEdit->append(process->readAllStandardOutput());

//process is object of QProcess
i get it:
bq. “áâ ­®¢ª á¢ï§¨ á CORBINA
à®¢¥àª ¨¬¥­¨ ¨ ¯ à®«ï ¯®«ì§®¢ ⥫ï…
¥£¨áâà æ¨ï ª®¬¯ìîâ¥à ¢ á¥â¨…
“áâ ­®¢«¥­ á¢ï§ì á CORBINA.
Š®¬ ­¤ ãᯥ譮 § ¢¥à襭 .

behind normal text, i try use toAscii(), toLocal8bit(), toUtf8(), toLatin1(), but i dont get normal text, how can i do it?
Advance many thanks for your help!

14 replies

July 29, 2011

Franzk Franzk
Lab Rat
830 posts

The problem is probably not in the conversion from QString, but in the conversion to QString. The QProcess::readALlStandardOutput() function returns a byte array. You have to convert that to a QString using the proper encoding using one of the QString::from*() variants, or even explicitly stating an encoding. Probably you could go for QString::fromLocal8Bit(), but I’m not sure about that.

What kind of text does the process output?

 Signature 

“Horse sense is the thing a horse has which keeps it from betting on people.”—W.C. Fields

http://www.catb.org/~esr/faqs/smart-questions.html

July 30, 2011

Vass Vass
Hobby Entomologist
738 posts

@Franzk
Seems like russian text in win cp1251 (or, oh god, cp 866) encoding :D

@Ruzik try toLocal8bit() to local QString, after it try using QTextCodec class for correct encoding

 Signature 


Vasiliy

July 30, 2011

Ruzik Ruzik
Lab Rat
293 posts

I try use all QString::from*, but it is donr work

What kind of text does the process output?

I think, that it is must output russian text, as think Vass

Ruzik try toLocal8bit() to local QString, after it try using QTextCodec class for correct encoding

I try do it, but i get other strange simbols instead of normal signs:

  1.  QString str;
  2.  QByteArray bArray = process->readAllStandardOutput();
  3.  str = QString(bArray).toLocal8Bit();
  4.  QTextCodec * tc = QTextCodec::codecForLocale();
  5.  if(tc->canEncode(str))
  6.   textEdit->append(tc->toUnicode(bArray));

July 30, 2011

Franzk Franzk
Lab Rat
830 posts


  1.  QString str;
  2.  QByteArray bArray = process->readAllStandardOutput();
  3.  str = QString(bArray).toLocal8Bit();
  4.  QTextCodec * tc = QTextCodec::codecForLocale();
  5.  if(tc->canEncode(str))
  6.   textEdit->append(tc->toUnicode(bArray));


You are worried about the outgoing encoding, but you forget the incoming encoding. This code makes no sense at all.

Get your incoming encoding right:

  1.  // untested
  2. QTextCodec *codec = QTextCodec::codecForLocale();
  3. QByteArray bytes = process->readAllStandardOutput();
  4. QString str = codec->toUnicode(bytes);
  5. textEdit->append(str);

While you’re at it, check if codecForLocale() is actually the codec you need.

 Signature 

“Horse sense is the thing a horse has which keeps it from betting on people.”—W.C. Fields

http://www.catb.org/~esr/faqs/smart-questions.html

July 30, 2011

Ruzik Ruzik
Lab Rat
293 posts

While you’re at it, check if codecForLocale() is actually the codec you need.

It seems that no,

“бв ­®ўЄ бўп§Ё б CORBINA
Џа®ўҐаЄ Ё¬Ґ­Ё Ё Ї а®«п Ї®«м§®ў ⥫п…
ђҐЈЁбва жЁп Є®¬ЇмовҐа ў бҐвЁ…
“бв ­®ў«Ґ­ бўп§м б CORBINA.
Љ®¬ ­¤ гбЇҐи­® § ўҐа襭 .

July 30, 2011

Franzk Franzk
Lab Rat
830 posts

That of course implied that you find out what encoding the external process uses to output it’s text. Does it look OK when you run the application in a console? Does the application documentation say anything about it?

 Signature 

“Horse sense is the thing a horse has which keeps it from betting on people.”—W.C. Fields

http://www.catb.org/~esr/faqs/smart-questions.html

July 30, 2011

Ruzik Ruzik
Lab Rat
293 posts

Process – rasdial.exe in Windows(http://msdn.microsoft.com/en-us/library/aa377004(v=vs.85).aspx )
Output on the russian language(on the my computer), but i dont know encoding of this process

July 30, 2011

Franzk Franzk
Lab Rat
830 posts

There is a slight possibility that that program outputs utf16 encoded data. Just using the byte array won’t bu sufficient then. I’m not sure how to find out whether it does, though.

 Signature 

“Horse sense is the thing a horse has which keeps it from betting on people.”—W.C. Fields

http://www.catb.org/~esr/faqs/smart-questions.html

July 30, 2011

Ruzik Ruzik
Lab Rat
293 posts

I’m not sure how to find out whether it does, though

I try to ask it by Microsoft))

July 30, 2011

Ruzik Ruzik
Lab Rat
293 posts

Microsoft didnt get me answer, i think that Vass was right, it is CP1251

July 30, 2011

Ruzik Ruzik
Lab Rat
293 posts

I found that it is may CP1251 or koi8-U

July 30, 2011

Franzk Franzk
Lab Rat
830 posts

Consider choosing that locale explicitly:

  1. QTextCodec *cp1251 = QTextCodec::codecForName("Windows-1251");
  2. QTextCodec *koi8u = QTextCodec::codecForName("KOI8-U");

for example, and see if that makes a difference in converting the string to unicode/QString.

 Signature 

“Horse sense is the thing a horse has which keeps it from betting on people.”—W.C. Fields

http://www.catb.org/~esr/faqs/smart-questions.html

July 30, 2011

Ruzik Ruzik
Lab Rat
293 posts

Yes, it makes a difference in converting the string to unicode/QString
Windows-1251:
“бв ­®ў«Ґ­ бўп§м б CORBINA.
Љ®¬ ­¤ гбЇҐи­® § ўҐа襭 .

Koi8-U
⌠АБ═ґ╝╒╚╔ґ═ А╒ОїЛ А CORBINA.
┼╝╛═ґє═ ЦА╞╔Хґ╝ ї═╒╔ЮХ╔ґ═.

July 31, 2011

Ruzik Ruzik
Lab Rat
293 posts

I find it, it was CP866
Many thanks for your help!

 
  ‹‹ Fill parent in Qt Creator 2.2.0      How can i get access point of wireless connection ››

You must log in to post a reply. Not a member yet? Register here!