Название: из одной кодировки в другую (РЕШЕНО) Отправлено: andrew.k от Июль 04, 2011, 15:51 Подскажите как получить строку, например, в кодировке CP1251. Если у меня setCodecForCStrings( "KOI8-R" ) и все исходники тоже в кои.
Не могу никак врубиться, на выходе все время получаются вопросики. Нужно что-то вроде. Код
Название: Re: из одной кодировки в другую Отправлено: kambala от Июль 04, 2011, 16:31 Цитата: Assistant QTextCodecs can be used as follows to convert some locally encoded string to Unicode. Suppose you have some string encoded in Russian KOI8-R encoding, and want to convert it to Unicode. The simple way to do it is like this: не подходит?Код
Название: Re: из одной кодировки в другую Отправлено: andrew.k от Июль 04, 2011, 17:56 Не подходит. Проблема была в другом на самом деле.
А делается так. Из кодировки КОИ в 1251. Возможны синтаксические ошибки :) Код
Название: Re: из одной кодировки в другую (РЕШЕНО) Отправлено: sergek от Октябрь 16, 2011, 12:58 Недавно натолкнулся на это сообщение: http://www.sql.ru/forum/actualthread.aspx?tid=867419 (http://www.sql.ru/forum/actualthread.aspx?tid=867419).
На мой взгляд, это самое толковое объяснение принципа работы с кодировками в Qt. Привожу полный текст сообщения: Цитировать QTextCodec - это такая хитрая хрень, в которой хитрости больше, чем смысла. Хитрость в том, что кодек надо создавать всегда с названием какой-то кодировки, например "cp-1251". Читатель спросит: Идея такая: кодек, который вы создаёте с указанием конкретной кодировки, умеет лишь гонять строку между указанной кодировкой и юникодом. Юникод - это не utf-8/utf-32, а жирная 2-байтовая таблица кодов; utf-8 - это не юникод, не надо путать, а только одно из представлений юникода. Так вот, после того как вы создали кодек (например "cp-1251") он предлагает вам гонять строку в двух направлениях "UNICODE <---> cp1251". Чтобы засобачить cp1251 в KOI8, вам надо создать два кодека, потом проделать операцию "cp1251 ---> UNICODE ---> KOI8". У кодека есть две основные операции: * toUnicode * fromUnicode Это и есть два вышеописанных направления. Когда для кодека "cp1251" вы вызываете "toUnicode()" - это направление "cp1251 -> UNICODE", а когда fromUnicode(), то наоборот "UNICODE -> cp1251". toUnicode() всегда возвращает QString, так как QString - это массив двухбайтовых значений - как раз для переноски юникода. fromUnicode() всегда возващает массив байт QByteArray, так как направление "из UNICODE в КАКУЮ_ЛИБО_КОДИРОВКУ" предполагает возврат юзеру потенциально диких с точки зрения QString кусков памяти, поэтому проще QByteArray(). |