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

Posted

技术标签:

【中文标题】德尔福。使用 idHTTP 显示获取。在多语言 Windows 中获取 Unicode 文本【英文标题】:Delphi. Show gotten with idHTTP.Get Unicode text in multilanguage Windows 【发布时间】:2011-06-07 16:27:43 【问题描述】:

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

我有 Delphi 2010

我尝试 idHTTP.Get 一个带有 Unicode 文本(俄语)的文件从站点到 Windows 7 英文版的 MemoryStream。

然后我将这个带有 Unicode 文本的 MemoryStream 加载到例如备忘录中。

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

如何使用 idHTTP.Get 从站点加载 Unicode 中的俄语文本并在任何 Windows(中文、英文等)中正确显示???

谢谢你的帮助!!!

【问题讨论】:

除了写句子来描述您所做的事情之外,请复制并粘贴您的代码。此外,请使用此页面底部的“联系我们”链接请求管理员将您的多个帐户合并为一个。 【参考方案1】:

我建议更新到支持 Unicode 的最新 Delphi 版本。

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

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

【讨论】:

@Michael:D2010 确实支持 Unicode,所以应该没有问题。 但是我有问题,如果我没有在idHTTP中设置字符集/代码页会不会出错? 向服务器发送请求时不要设置字符集(除非向服务器发送文本)。服务器会告诉您它在响应中发送给您的文本的字符集编码。如果检测到,最新版本的 Indy 10 会使用该字符集对文本进行解码。如果使用错误的字符集来解码文本,可能会导致问题。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】: 更新到 D2009 或更高版本 使用支持unicode的组件(我记得TMS提供了一些组件) 为您使用的语言正确设置字符集/代码页

【讨论】:

我有 Delphi 2010。我在 idHttp 中使用 Memory Stream,所以 idHTTP 不会将字符更改为其他代码。我没有设置字符集/代码页。我会试试的。 @Michael:因为您正在下载到TMemoryStream,所以您正在接收原始编码数据。然后,您有责任自己解码数据,然后才能正确显示它。最好让 Indy 为你解码。

以上是关于德尔福。使用 idHTTP 显示获取。在多语言 Windows 中获取 Unicode 文本的主要内容,如果未能解决你的问题,请参考以下文章

使用 GraphQL 查询从多语言模式中获取本地化数据

[Abp 源码分析]多语言(本地化)处理

WPF使用X:Static做多语言支持

WPF使用X:Static做多语言支持

我可以在textView中添加多语言吗?

[Abp 源码分析]十多语言(本地化)处理