Russian Qt Forum
Июля 02, 2025, 05:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кодировки, кракозябры  (Прочитано 9334 раз)
8: Undefined index: LANG_NAME
Файл: /var/www/html/Sources/geshi/geshi.php
Строка: 4032
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Января 19, 2016, 10:59 »

Пришла utf8 строка по сети "Не указана точка"
В корпоративной программе автоматом залогировалась как: "РќРµ указана точка"

Я как понимаю, декодировалась она как как однобайтовая, поэтому в два раза больше символов в кракозябре получилось.
Пытался сам с этим разобраться и нифига, а вот декодер смог разобраться и отписался: "
Как нам пришлось помучиться
CP1251 → UTF-8"

Пытался повторить сей подвиг, но не вышло
Код
C++ (Qt)
   QString s = "РќРµ";
 
   QTextCodec *codec = QTextCodec::codecForName("cp1251");
   qDebug() << codec->fromUnicode(s); // "? ??? ?µ"
 
   QTextCodec *codec1 = QTextCodec::codecForName("utf8");
   qDebug() << codec1->toUnicode(codec->fromUnicode(s)); // "????????"
 

Подскажите, как этой магией кодировок овладеть? Улыбающийся
Записан

Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Января 19, 2016, 11:51 »

Не буду по сотому разу все повторять, было уже масса тем на форме, где все это разжевывалось. Подмигивающий

Пришла utf8 строка по сети "Не указана точка"
В корпоративной программе автоматом залогировалась как: "РќРµ указана точка"
По сети пришла строка в utf8, ее вы получаете в QByteArray (внимание! не в QString), дальше нужно воспользоваться кодеком utf8, для перевода этой строки в unicode QString.

Код
C++ (Qt)
QTextCodec *codec = QTextCodec::codecForName("utf8");
 
QByteArray data = socket.readAll();
QString str = codec->toUnicode( data );
 
« Последнее редактирование: Января 19, 2016, 11:57 от Old » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Января 19, 2016, 12:20 »

Не буду по сотому разу все повторять, было уже масса тем на форме, где все это разжевывалось. Подмигивающий

Пришла utf8 строка по сети "Не указана точка"
В корпоративной программе автоматом залогировалась как: "РќРµ указана точка"
По сети пришла строка в utf8, ее вы получаете в QByteArray (внимание! не в QString), дальше нужно воспользоваться кодеком utf8, для перевода этой строки в unicode QString.

Код
C++ (Qt)
QTextCodec *codec = QTextCodec::codecForName("utf8");
 
QByteArray data = socket.readAll();
QString str = codec->toUnicode( data );
 


Я не могу во внутренности залесть и поменять ) Да и там ява крутится )
Хочу ту кракозябру перекодировать в читаемый вид Улыбающийся
Записан

Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Января 19, 2016, 12:45 »

Я не могу во внутренности залесть и поменять ) Да и там ява крутится )
Хочу ту кракозябру перекодировать в читаемый вид Улыбающийся
А понятно. Улыбающийся
Код
C++ (Qt)
QByteArray textWin = file.readAll();    // Читаете из файла в QByteArray - это строка в CP1251
 
QTextCodec *codec = QTextCodec::codecForName( "windows-1251" );
QString textOk = codec->toUnicode( textWin );
 
Записан