Delphi. Показать полученный с помощью idHTTP.Get текст Unicode в многоязычной Windows - PullRequest
3 голосов
/ 07 июня 2011

Мне нужна твоя помощь. Пожалуйста, помогите мне.

У меня Delphi 2010

Я пытаюсь idHTTP. Получить файл с текстом Unicode (русский) с сайта в MemoryStream на английской версии Windows 7.

Затем я загружаю этот MemoryStream с текстом Unicode, например, в Memo.

Если я установил русский язык как «Язык для программ, не поддерживающих Юникод» в панели управления, текст в Memo будет отображаться правильно. Но если я установлю Enlish - я получаю неправильные символы (* $ ^ # ~! @).

Как я могу загрузить русский текст в Unicode с помощью idHTTP.Get с сайта и правильно отобразить его в любой Windows (китайский, английский и т. Д.) ???

Спасибо за помощь !!!

Ответы [ 3 ]

1 голос
/ 11 июня 2011

TMemo ожидает текст Unicode (в кодировке UTF-16).Если вы загружаете текст, используя версию TIdHTTP.Get(), которая заполняет TStream, то вы загружаете необработанный (обычно закодированный в Ansi) текст, а затем отвечаете за ручное декодирование этого текста в Unicode, а затем назначаете его для * 1003.*.

Предполагая, что веб-сервер указывает правильную кодировку для текста в заголовках ответа, затем используйте версию TIdHTTP.Get(), которая вместо этого возвращает String.TIdHTTP обнаружит кодировку и декодирует необработанные данные в Unicode для вас, например:

Memo1.Text := IdHTTP1.Get('http://addr_here');
1 голос
/ 07 июня 2011

Я предлагаю обновить до последней версии Delphi с поддержкой Unicode.

Обновление: Похоже, что поток памяти фактически содержит AnsiText в определенной кодовой странице вместо реального текста Unicode. Вы можете объявить соответствующую переменную AnsiString с этой кодовой страницей, загрузить текст в эту переменную и затем загрузить переменную в заметку.

Трудно сказать больше, не видя реальных данных.

0 голосов
/ 07 июня 2011
  • Обновление до D2009 или выше
  • Используйте компоненты, которые поддерживают Unicode (я помню TMS предлагает некоторые компоненты)
  • Установите правильный набор символов / кодовую страницу для языка, который вы используете
...