Какая локаль UTF8? - PullRequest
       2

Какая локаль UTF8?

2 голосов
/ 24 июня 2011

Я получаю XML-файл из API Facebook с данными:

&lt?xml version="1.0" encoding="UTF-8"?&gt 
&ltfql_query_response xmlns="api.facebook.com/1.0/"; xmlns:xsi="w3.org/2001/XMLSchema-instance"; list="true"&gt 
    &ltuser&gt 
        &ltuid&gt100000022063315&lt/uid&gt 
        &ltname&gt0xD7 0x99 0xD7 0x95 0xD7 0x97 0xD7 0x90 0xD7 0x99 0x20 0xD7 0x95 0xD7 0x9B 0xD7 0x98 0xD7 0xA8&lt/name&gt 
    &lt/user&gt
&lt/fql_query_response&gt

Я хочу перевести UTF-8 в wchar_t.Я пытаюсь сделать это с mbstowcs, но, видимо, мне нужно знать, какой язык установить.Есть ли стандартная локаль для фейсбука?или для utf8?

Ответы [ 3 ]

5 голосов
/ 24 июня 2011

Чтобы перевести данные, которые не связаны с настроенным языковым стандартом пользователя, а явно указаны в кодировке, вы должны использовать iconv, а не mbsrtowcs. Вам вообще не нужно setlocale.

4 голосов
/ 24 июня 2011

Как отмечает @pst, терминология здесь немного неверна. «Локаль» иногда используется для обозначения того, какая кодовая страница ANSI используется для представления международного текста, когда Юникод недоступен

Прочитайте фантастическое замечание Джоэла Спольски "Абсолютный минимум, который должен знать каждый разработчик программного обеспечения Абсолютно, положительно, необходимо знать о Unicode и наборах символов (без извинений!)"

Теперь, чтобы ответить на ваш вопрос, если вам нужно преобразовать кодированный в UTF-8 текст в UTF-16 (или то, что в Windows обычно называют "широким символом"), вы можете использовать такую ​​функцию, как MultiByteToWideChar с параметром CP_UTF8

0 голосов
/ 24 июня 2011

Вот небольшое обсуждение Я начал некоторое время назад на эту тему.

В принципе, я бы лично выделил два отдельных пути обработки кодирования:

  • Один - это независимый от кодирования «внутренне переносимый» путь, который использует mbstowcs для преобразования внешних многобайтовых данных из char * argv[] и преобразования их во внутреннюю строку с фиксированной шириной, причем все, даже не говоря о кодировках.

  • Другой является сериализуемым путем с фиксированным кодированием, который обрабатывает данные, которые отправляются в детерминированных кодировках.Для их перевода библиотека Posix iconv делает свое дело.

  • Вы можете соединить два пути, используя специальную кодировку iconv WCHAR_T.

Поскольку описываемая вами ситуация требует от вас чтения сериализованных детерминированных данных, я бы предложил использовать iconv для преобразования из UTF8 (который, как вы знаете, у вас есть) и преобразования в WCHAR_T, который затем можно обработать с помощьюстандартные строковые функции в Си (но не делайте предположений о фактической кодировке).Если вам нужно вывести данные на консоль, вы всегда можете wcstombs из ваших внутренних широких строк в многобайтовое представление (подробности о котором вас не интересуют), которое консоль сказала вам, что хочет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...