Delphi 德尔菲。显示使用idHTTP获取的文本。在多语言窗口中获取Unicode文本

Delphi 德尔菲。显示使用idHTTP获取的文本。在多语言窗口中获取Unicode文本,delphi,http,unicode,delphi-2010,indy10,Delphi,Http,Unicode,Delphi 2010,Indy10,我需要你的帮助。请帮帮我 我有德尔福2010 我尝试idHTTP。在英文版的Windows7上,从站点获取一个带有Unicode文本(俄语)的文件到MemoryStream 然后我将这个带有Unicode文本的MemoryStream加载到例如Memo中 如果我在控制面板中将俄语设置为“非Unicode程序语言”,则文本将正确显示在备忘录中。但是如果我设置Enlish,我会得到错误的字符(*$^#~!@) 如何使用idHTTP加载Unicode格式的俄语文本。从站点获取并在任何窗口中正确显示(中

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

我有德尔福2010

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

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

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

如何使用idHTTP加载Unicode格式的俄语文本。从站点获取并在任何窗口中正确显示(中文、英文等)


谢谢你的帮助

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

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

如果看不到真实数据,就很难说出更多信息。

  • 更新至D2009或更高版本
  • 使用支持unicode的组件(我记得提供了一些组件)
  • 为您使用的语言正确设置字符集/代码页
TMemo需要Unicode(UTF-16编码)文本。如果您使用填充
TStream
TIdHTTP.Get()
版本下载文本,则您将下载原始(通常为Ansi编码)文本,然后负责手动将其解码为Unicode,然后将其分配给
TMemo

假设Web服务器为响应头中的文本指定了正确的字符集,则使用返回
字符串的
TIdHTTP.Get()
版本
TIdHTTP
将检测字符集并将原始数据解码为Unicode,例如:

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

@Michael:D2010确实支持Unicode,所以应该没有问题。但是我有问题,如果我没有在idHTTP中设置字符集/代码页,这可能是错误的吗?当您向服务器发送请求时,您没有设置字符集(除非您向服务器发送文本)。服务器会告诉您它在响应中发送给您的文本的字符集编码。如果检测到该字符集,最新版本的Indy 10将使用该字符集对文本进行解码。如果使用错误的字符集来解码文本,可能会导致问题。我有Delphi2010。我在idHttp中使用内存流,所以idHttp不会将字符更改为其他代码。我没有设置字符集/代码页。迈克尔:因为您正在下载到
TMemoryStream
,所以您正在接收原始编码数据。然后,您自己负责解码数据,然后才能正确显示数据。最好让印地替你解码。除了写句子来描述你所做的之外,请复制并粘贴你的代码。此外,请使用此页面底部的“联系我们”链接,要求管理员将您的多个帐户合并为一个帐户。