HTML декодирование в C / C ++ - PullRequest
       19

HTML декодирование в C / C ++

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

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

У меня проблемы с ивритскими символами.

например это: סלקום получает тарабарщину.

Как получить ивритские символы, а не тарабарщину?

Нужен ли мне HTML-декодер?

Поддерживает ли libcurl такую ​​операцию?

Поддерживает ли libiconv такую ​​операцию?

Я ценю любую помощь.

Спасибо

1 Ответ

1 голос
/ 19 октября 2010

Редактировать: Хорошо, так что вы видите, что данные UTF-8 декодируются как Windows-1252 (поэтому числовые ссылки на символы были красной сельдью). Вот демонстрация на Python:

>>> u = ''.join(map(unichr, [1505, 1500, 1511, 1493, 1501]))
>>> s = u.encode('utf-8')
>>> print s.decode('cp1255', 'replace')
׳¡׳�׳§׳•׳�

Решение этой проблемы зависит от среды, в которой отображается вывод. Простой вывод полученных байтов и ожидание их интерпретации как символов приводит к таким проблемам.

HTML-документ обычно содержит тег заголовка, например <meta charset=utf-8>, чтобы указать браузеру, какой должна быть его кодировка. Документ, обслуживаемый веб-сервером, содержит заголовок HTTP, например Content-Type: text/html; charset=utf-8.

Вы должны попросить libcurl для заголовка Content-Type HTTP узнать кодировку документа, а затем преобразовать его в системную кодировку с помощью iconv. Хотя в вашем случае это будет кодовая страница 1255, она зависит от системы пользователя, поэтому вы должны найти соответствующие функции, чтобы обнаружить это.

(Читать Юникод и наборы символов и тег с кодировкой символов на этом сайте для получения дополнительной информации.)

...