Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > UTF8toAnsi работает не для всех строк


Автор: quarz 23.10.2008, 01:02
Получаю код страницы Яндекса(post-запрос поисковику) через API WinInet. Страница возвращается мне в UTF-8. 
НО для одних страниц функция UTF8toAnsi срабатывает, а для других - нет, возвращает пустую строку.
Полученный код от яндекса я сохраняю в UTF8String. Значит проблема в этой строке, может в конце каким-то образом не стоит #0 (но тогда компилятор бы ругнулся на Out of Memory), или #0 стоит еще и в середине...других версий у меня пока нет.
Тогда записал в файлы 2 html страницы, с одной из которых UTF8toAnsi сработала нормально, а с другой - нет. Сравнения этих файлов ничего не дало. После этого я залез в System.pas, перекодировка в итоге сводится к функции
Код

function Utf8ToUnicode(Dest: PWideChar; MaxDestChars: Cardinal; Source: PChar; SourceBytes: Cardinal): Cardinal;

Но пока я так и не понял в чем косяк. Главный вопрос: что UTF8toAnsi находит во входной строке, что отказывается ее преобразовывать?



Автор: quarz 23.10.2008, 01:18
Да, еще на форуме в подобных темах проскакивало что UTF8toAnsi может не работать при наличии каких-то левых символов во входной строке. Что это за символы?

Автор: Seeker 13.11.2008, 11:03
Недавно тож билса с utf-8. Пытался конвертнуть страничку полученную по http в ansi. UTF8toAnsi не работало нивкакую. Выручил этот форум. Нашол я тут две функции UTF8ToStrSmart и UTF8ToStr. Все стало работать на ура. Попробуй поиском поискать прямо по названию, если не выйдет выложу.

Автор: Romikgy 13.11.2008, 12:13
http://forum.vingrad.ru/index.php?showtopic=133239&view=findpost&p=1007351

Автор: Seeker 14.11.2008, 21:04
Буквально сегодня глючок небольшой в функции UTF8ToStrSmart обнаружился. Там переменная i объявлена типом word и длинные документы просто обрезались. Нужно ее integer-ом заделать =). 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)