德尔福。使用idHTTP显示。在多语言Windows中获取Unicode文本

时间:2011-06-07 16:27:44

标签: delphi http unicode delphi-2010 indy10

我需要你的帮助。请帮帮我。

我有Delphi 2010

我尝试idHTTP。在英文版Windows 7上从站点获取带有Unicode文本(俄语)的文件到MemoryStream。

然后我将这个带有Unicode文本的MemoryStream加载到例如Memo。

如果我在控制面板中将俄语设置为“非Unicode程序的语言”,则文本会在备忘录中正确显示。但如果我设置Enlish - 我会得到错误的字符(* $ ^#〜!@)。

如何从网站加载带有idHTTP.Get的Unicode的俄文文本,并在任何Windows(中文,英文等)中正确显示???

谢谢你的帮助!!!

3 个答案:

答案 0 :(得分:1)

我建议更新到最近启用Unicode的Delphi版本。

更新:看起来内存流实际上包含特定代码页中的AnsiText而不是真正的Unicode文本。您可以使用该代码页声明适当的AnsiString变量,将文本加载到该变量中,然后将该变量加载到备忘录中。

如果没有看到真实的数据,很难说清楚。

答案 1 :(得分:1)

TMemo期望Unicode(UTF-16编码)文本。如果您使用填充TIdHTTP.Get()的{​​{1}}版本下载文本,那么您正在下载原始(通常是Ansi编码)文本,然后负责将其手动解码为Unicode,然后再分配到TStream

假设网络服务器为响应标头中的文本指定了正确的字符集,请使用返回TMemo的{​​{1}}版本。 TIdHTTP.Get()将检测字符集并将原始数据解码为Unicode,例如:

String

答案 2 :(得分:-1)

  • 更新至D2009或更高版本
  • 使用支持unicode的组件(我记得TMS提供了一些组件)
  • 为您正在使用的语言正确设置字符集/代码页