Russian Qt Forum

Qt => Общие вопросы => Тема начата: dangreen от Июнь 30, 2012, 22:40



Название: Конвертирование кодировки [Решено + QtJSONKit]
Отправлено: dangreen от Июнь 30, 2012, 22:40
сервер выдает следующую иформацию

Код:
[{"SectionID":"dev","Section":{"FR":"La Development","EN":"Development","RU":"\u0420\u00a0\u0421\u0453\u0421\u0403"}},{"SectionID":"im","Section":null}]

все это суетса в строку, но "\u0420\u00a0\u0421\u0453\u0421\u0403" не кодируется в нормальные буквы, как и что можно сделать что бы все это воспринималось как нормальные русские буквы?


Название: Re: Конвертирование кодировки
Отправлено: dangreen от Июль 01, 2012, 07:38
поможет кто?


Название: Re: Конвертирование кодировки
Отправлено: navrocky от Июль 01, 2012, 11:26
Похоже на UTF-16. Парси ручками строку и формируй результат. Встроенной функции скорее всего нет. Разве что в исходниках какого-нибудь Xml парсера в привате....


Название: Re: Конвертирование кодировки
Отправлено: dangreen от Июль 01, 2012, 17:21
Похоже на UTF-16. Парси ручками строку и формируй результат. Встроенной функции скорее всего нет. Разве что в исходниках какого-нибудь Xml парсера в привате....

выделить то эти символы несложно
как их сконвертировать?


Название: Re: Конвертирование кодировки
Отправлено: Kolobok от Июль 01, 2012, 17:52
QString QString::fromUcs4 ( const uint * unicode, int size = -1 ) [static]
QString QString::fromUtf16 ( const ushort * unicode, int size = -1 ) [static]


Название: Re: Конвертирование кодировки
Отправлено: dangreen от Июль 01, 2012, 18:51
QString QString::fromUcs4 ( const uint * unicode, int size = -1 ) [static]
QString QString::fromUtf16 ( const ushort * unicode, int size = -1 ) [static]

ну так и я могу, а вот как QString сначала в uint/ushort перекодировать ?


Название: Re: Конвертирование кодировки
Отправлено: kambala от Июль 01, 2012, 19:57
ручками трудно из строки числовые коды вытащить и засунуть в массив?


Название: Re: Конвертирование кодировки
Отправлено: dangreen от Июль 01, 2012, 20:42
ручками трудно из строки числовые коды вытащить и засунуть в массив?

и что дальше? можно по подробней пожалуста, еслиб я понимал все это то не спрашивал бы


Название: Re: Конвертирование кодировки
Отправлено: kambala от Июль 01, 2012, 21:48
а дальше – воспользоваться одним из методов, который предложил Kolobok.

находишь начало и конец куска с юникод-символами, дёргаешь оттуда числовые коды в виде строки, конвертируешь их через QString::toUShort(0, 16) и помещаешь в массив ushort[], получаешь строку из массива с помощью QString::fromUtf16(), вставляешь вместо юникода в свою строку (начало и конец мы знаем). повторять в цикле пока есть куски юникода. реализацию алгоритма оставляем нашим читателям в качестве домашнего задания :)


Название: Re: Конвертирование кодировки
Отправлено: dangreen от Июль 01, 2012, 22:20
а дальше – воспользоваться одним из методов, который предложил Kolobok.

находишь начало и конец куска с юникод-символами, дёргаешь оттуда числовые коды в виде строки, конвертируешь их через QString::toUShort(0, 16) и помещаешь в массив ushort[], получаешь строку из массива с помощью QString::fromUtf16(), вставляешь вместо юникода в свою строку (начало и конец мы знаем). повторять в цикле пока есть куски юникода. реализацию алгоритма оставляем нашим читателям в качестве домашнего задания :)

toUshort возвращает ushort
а fromUtf16 в параметре const ushort*


Название: Re: Конвертирование кодировки
Отправлено: dangreen от Июль 01, 2012, 23:02
проблема оказалась мнимой... на сервер залезло эта злосчастная строка..

ну сразу тогда выкладываю  класс для кодирования и декодирования JSON в QHash<QString,QVariant>


Название: Re: Конвертирование кодировки [Решено + QtJSONKit]
Отправлено: kambala от Июль 02, 2012, 00:37
а дальше – воспользоваться одним из методов, который предложил Kolobok.

находишь начало и конец куска с юникод-символами, дёргаешь оттуда числовые коды в виде строки, конвертируешь их через QString::toUShort(0, 16) и помещаешь в массив ushort[], получаешь строку из массива с помощью QString::fromUtf16(), вставляешь вместо юникода в свою строку (начало и конец мы знаем). повторять в цикле пока есть куски юникода. реализацию алгоритма оставляем нашим читателям в качестве домашнего задания :)

toUshort возвращает ushort
а fromUtf16 в параметре const ushort*
предлагаю поучить плюсы чтобы узнать, что массив можно спокойно передавать в функцию, которая ожидает указатель