Название: Кодировки, кракозябры Отправлено: gil9red от Января 19, 2016, 10:59 Пришла utf8 строка по сети "Не указана точка"
В корпоративной программе автоматом залогировалась как: "РќРµ указана точка" Я как понимаю, декодировалась она как как однобайтовая, поэтому в два раза больше символов в кракозябре получилось. Пытался сам с этим разобраться и нифига, а вот декодер (http://www.artlebedev.ru/tools/decoder/advanced/) смог разобраться и отписался: " Как нам пришлось помучиться CP1251 → UTF-8" Пытался повторить сей подвиг, но не вышло Код
Подскажите, как этой магией кодировок овладеть? :) Название: Re: Кодировки, кракозябры Отправлено: Old от Января 19, 2016, 11:51 Не буду по сотому разу все повторять, было уже масса тем на форме, где все это разжевывалось. ;)
Пришла utf8 строка по сети "Не указана точка" По сети пришла строка в utf8, ее вы получаете в QByteArray (внимание! не в QString), дальше нужно воспользоваться кодеком utf8, для перевода этой строки в unicode QString.В корпоративной программе автоматом залогировалась как: "РќРµ указана точка" Код
Название: Re: Кодировки, кракозябры Отправлено: gil9red от Января 19, 2016, 12:20 Не буду по сотому разу все повторять, было уже масса тем на форме, где все это разжевывалось. ;) Пришла utf8 строка по сети "Не указана точка" По сети пришла строка в utf8, ее вы получаете в QByteArray (внимание! не в QString), дальше нужно воспользоваться кодеком utf8, для перевода этой строки в unicode QString.В корпоративной программе автоматом залогировалась как: "РќРµ указана точка" Код
Я не могу во внутренности залесть и поменять ) Да и там ява крутится ) Хочу ту кракозябру перекодировать в читаемый вид :) Название: Re: Кодировки, кракозябры Отправлено: Old от Января 19, 2016, 12:45 Я не могу во внутренности залесть и поменять ) Да и там ява крутится ) А понятно. :)Хочу ту кракозябру перекодировать в читаемый вид :) Код
Название: Re: Кодировки, кракозябры Отправлено: gil9red от Января 19, 2016, 13:11 Код: [quote author=Old link=topic=29723.msg218275#msg218275 date=1453196707] Спасибо, помогло: создал файл в кодировке cp1251 и считал его: Код [/code] Название: Re: Кодировки, кракозябры Отправлено: kambala от Января 19, 2016, 14:36 либо просто использовать QString QString::fromUtf8(const QByteArray & str)
Название: Re: Кодировки, кракозябры Отправлено: gil9red от Января 19, 2016, 15:04 либо просто использовать QString QString::fromUtf8(const QByteArray & str) Нет, не поможет, когда проверял вашу подсказку заметил, что в своем коде вышел ошибся, так что QByteArray c = "РќРµ указана точка"; qDebug() << QString::fromUtf8(c); Выведет "РќРµ указана точка" Название: Re: Кодировки, кракозябры Отправлено: dddasd от Января 19, 2016, 15:45 Кодировка ваших исходников (*.cpp) в utf-8, поэтому так не работает, надо перекодировать в windows-1251. тогда будет наверное работать.
Название: Re: Кодировки, кракозябры Отправлено: Bepec от Января 19, 2016, 17:35 Почему это происходит? Потому что строка эта в ANSI, а вы копируете её в исходники, а исходники QtCreator имеют кодировку UTF-8.
Чтоб понятнее было(да и сам ещё раз убедился), вот такой код Код:
Результат: Строка в исходниках "\xD0\xA0\xD1\x9C\xD0\xA0\xC2\xB5 \xD0\xA1\xD1\x93\xD0\xA0\xD1\x94\xD0\xA0\xC2\xB0\xD0\xA0\xC2\xB7\xD0\xA0\xC2\xB0\xD0\xA0\xD0\x85\xD0\xA0\xC2\xB0 \xD0\xA1\xE2\x80\x9A\xD0\xA0\xD1\x95\xD0\xA1\xE2\x80\xA1\xD0\xA0\xD1\x94\xD0\xA0\xC2\xB0" Правильное байтовое представление из файла "\xD0\x9D\xD0\xB5 \xD1\x83\xD0\xBA\xD0\xB0\xD0\xB7\xD0\xB0\xD0\xBD\xD0\xB0 \xD1\x82\xD0\xBE\xD1\x87\xD0\xBA\xD0\xB0" Но достаточно изменить кодировку исходников в ANSI и забьём туда строку "Не найдена точка" и результат будет в обоих случаях правильный. Название: Re: Кодировки, кракозябры Отправлено: Old от Января 19, 2016, 18:13 Нет, не поможет, когда проверял вашу подсказку заметил, что в своем коде вышел ошибся, так что Не нужно так проверять. Как только вы вставили эту строку в исходники, она превратилась в строку в utf-8. И дальше вы эту строку с крякозябрами в кодировки utf-8 пытаетесь во что-то конвертировать и она прекрасно конвертируется в такие же крякозябры. :)QByteArray c = "РќРµ указана точка"; qDebug() << QString::fromUtf8(c); Выведет "РќРµ указана точка" Название: Re: Кодировки, кракозябры Отправлено: gil9red от Января 19, 2016, 18:20 Спасибо за пояснения :)
|