2011-06-07 59 views
3

我需要你的帮助。请帮帮我。德尔福。显示得到idHTTP.Get Unicode文本在多语言Windows

我有德尔福2010

我尝试idHTTP.Get与Unicode文本(俄罗斯),从网站到MemoryStream的英语版本的Windows的文件7.

然后,我这的MemoryStream与Unicode文本加载到,例如,备忘录。

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

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

谢谢你的帮助!

+0

除了撰写的句子来描述你做了什么,请复制并粘贴您的** **的代码。另外,使用此页面底部的“与我们联系”链接要求管理员将多个帐户合并为一个。 – 2011-06-07 19:55:43

回答

1

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

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

如果没有看到真实的数据,很难分辨更多。

+0

我有德尔福2010 – Michael 2011-06-07 17:09:26

+0

@迈克尔:D2010确实支持Unicode,所以应该没有问题。 – jpfollenius 2011-06-07 17:15:30

+0

但我有问题,如果我没有在idHTTP中设置字符集/代码页可以错误吗? – Michael 2011-06-07 17:50:44

-1
  • 更新至D2009或支持Unicode的更高
  • 使用的组件(我记得TMS提供了一些组件)
  • 正确设置字符集/代码页,您使用的是
+0

我有德尔福2010年。我在idHttp中使用内存流,所以idHTTP将不会将字符更改为其他代码。我没有设置字符集/代码页。我会尝试。 – Michael 2011-06-07 17:29:19

+0

@Michael:因为您正在下载到“TMemoryStream”中,您正在接收原始编码数据。然后,您可以自行解码数据,然后才能正确显示数据。最好让Indy为你解码。 – 2011-06-14 06:52:31

1

语言TMemo需要Unicode(UTF-16编码)文本。如果您使用填充TStream的版本TIdHTTP.Get()下载文本,则您正在下载原始(通常是Ansi编码)文本,然后负责将其手动解码为Unicode,然后将其分配给TMemo

假设网络服务器正在为响应头中的文本指定一个正确的字符集,然后使用TIdHTTP.Get()的版本,而不是返回StringTIdHTTP将检测到的字符集,并为您解码的原始数据转换成Unicode,如:

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