2011-06-07 3 views
3

Мне нужна ваша помощь. Пожалуйста, помогите мне.Delphi. Показать полученный с idHTTP.Get Юникод текст в многоязычном Windows

У меня есть Delphi 2010

Я пытаюсь idHTTP.Get файл с текстом Юникода (на русском языке) с сайта в MemoryStream на английской версии Windows, 7.

Тогда я загрузить этот MemoryStream с текстом Unicode в , например, Memo.

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

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

Благодарим за помощь !!!

+0

В дополнении к написанию предложений, чтобы описать то, что вы сделали, пожалуйста, скопируйте и вставьте код ** **. Кроме того, используйте ссылку «Связаться с нами» внизу этой страницы, чтобы попросить администратора объединить несколько учетных записей в один. –

ответ

1

Предлагаю обновить до последней версии Delphi, которая включена в Unicode.

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

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

+0

У меня есть Delphi 2010 – Michael

+0

@Michael: D2010 поддерживает Unicode, поэтому проблем не должно быть. – jpfollenius

+0

Но у меня проблемы, может быть неправильно, если я не установил набор символов/код в idHTTP? – Michael

-1
  • Обновление D2009 или выше
  • использования компонентов, поддерживающих Юникод (я помню TMS предлагает некоторые компоненты)
  • Установка страницы набора символов/кода правильно для языка, который вы используете
+0

У меня есть Delphi 2010. Я использую Memory Stream в idHttp, поэтому idHTTP wil не изменяет символы в другой код.Я не задал набор символов/код. Я попробую. – Michael

+0

@Michael: поскольку вы загружаетесь в «TMemoryStream», вы получаете необработанные закодированные данные. Затем вы отвечаете за дешифрование данных самостоятельно, прежде чем сможете отобразить его правильно. Лучше позволить Indy сделать декодирование для вас. –

1

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

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

Memo1.Text := IdHTTP1.Get('http://addr_here'); 

 Смежные вопросы

  • Нет связанных вопросов^_^