Как конвертировать ISO-8859-1 в UTF-8, используя libiconv в C ++ - PullRequest
0 голосов
/ 20 октября 2010

Я использую libcurl для извлечения некоторых HTML-страниц.

HTML-страницы содержат некоторые ссылки на символы, такие как: סלקום

Когда я читаю это с использованием libxml2, я получаю: ׳100 ׳¨׳˜׳ ׳¨

это кодировка ISO-8859-1?

Если это так, как мне преобразовать его в UTF-8, чтобы получить правильное слово.

Спасибо

РЕДАКТИРОВАТЬ: я получил решение, MSalters был прав, libxml2 использует UTF-8.

Я добавил это в eclipse.ini

-Dfile.encoding = utf-8

и наконец я получил ивритские символы на моей консоли Eclipse.Спасибо

Ответы [ 3 ]

3 голосов
/ 20 октября 2010

Вы видели страницу libxml2 на i18n ?Он объясняет, как libxml2 решает эти проблемы.

Вы получите ס от libxml2.Тем не менее, вы сказали, что вы получите что-то вроде ׳₪׳¨׳˜׳ ׳¨.Почему вы думаете, что получили это?Вы получаете XMLchar*.Как вы преобразовали этот указатель в строку выше?Возможно, вы использовали отладчик?Этот отладчик знает, как отобразить XMLchar*?Держу пари, что XMLchar* правильный, но вы использовали отладчик, который не может отобразить Unicode в XMLchar*

Чтобы ответить на ваш последний вопрос, XMLchar* уже UTF-8 и не нуждаетсядальнейшее преобразование.

0 голосов
/ 20 октября 2010

Этот ответ был дан в предположении, что закодированный текст возвращается как UTF-16, что, как оказалось, не так.


Я быугадайте кодировку UTF-16 или UCS2.Укажите это как вход для iconv.Также может быть проблема с порядком байтов, посмотрите здесь


Способ в стиле c будет (без проверки на ясность):

iconv_t ic = iconv_open("UCS-2", "UTF-8");
iconv(ic, myUCS2_Text, inputSize, myUTF8-Text, outputSize);
iconv_close(ic);
0 голосов
/ 20 октября 2010

Нет.Эти объекты соответствуют десятичному значению порядкового номера Unicode ваших символов.См., Например, эту страницу .

Таким образом, вы можете сохранить значения Unicode как int egers и использовать алгоритм для преобразования этих целых чисел в многобайтовый символ UTF-8.См. Спецификацию UTF-8 для этого.

...