【问题标题】:How to convert text to UTF-8 Delphi如何将文本转换为 UTF-8 Delphi
【发布时间】:2011-06-12 16:25:39
【问题描述】:

我有一个从 Internet 返回 HTML 页面的函数,但西里尔符号与其他一些未知字符一起显示。 如何转换文本并能够看到正常的西里尔符号?

我使用的是 Delphi 2009,我使用 indy 发送 HTTP 请求并从服务器返回响应。 (我想我有 indy9)

这就是我获取 HTML 页面的方式

http := TIDHttp.Create(nil);
http.HandleRedirects := true;
http.ReadTimeout := 5000; 
http.Request.ContentType:='multipart/form-data'; 
param:=TIdMultiPartFormDataStream.Create;
param.AddFormField('subcat_id','501');
param.AddFormField('reg_id','1');
text:=http.Post('example.com',param);

我不知道 indy 是否有任何函数可以获取带有任何 unicode 的页面。

【问题讨论】:

  • 可能是Unicode问题,请问您使用的是什么版本的Delphi,能否贴出代码或代码示例让我们看看?
  • 您需要提供更多详细信息。您如何接收数据?它是如何编码的?
  • @David,首先,所有 HTTP 消息都是八位字节流。进一步的处理取决于它的内容类型和它的字符集参数。
  • 致 OP:什么 Delphi 版本,您使用什么组件或库进行 HTTP 下载,您如何显示接收到的文本,您看到的是问号、正方形还是无意义的字符?跨度>
  • @User:在指定delphi版本之前,您的问题很难回答。

标签: delphi text utf-8


【解决方案1】:

您没有提供足够的信息,但我会尝试建议:如果可能,将数据加载到 Stream 中,然后创建一个 StringList 并像这样加载它:

var
  MS:TMemoryStream;
  SL: TStringList;
(...)
begin
  MS:=TMemoryStream.Create;
  SL:=TStringList.Create;
  // Load your string to MS
  SL.LoadFromStream(MS, TEncoding.UTF8);
  (...)
  MS.Free;
  SL.Free;
end;

如果有问题请评论。

【讨论】:

  • 不工作,我不认为这是我的问题的解决方案
  • @user759588 因为我一直都是这样做的。而且我发现 StringList 很容易使用。如果还有其他方法,请告诉我:) @TreantBG 如果是这种情况,请提供更多详细信息。
【解决方案2】:

您的问题标题似乎与问题正文不同步。假设你想解码 UTF-8 编码的 HTML 页面,你的朋友是函数 UTF8Decode。由UTF8Encode 完成的相反操作。这些功能早在 Delphi 7 中就可用(如果 D6 也适用,请纠正我)。查看文章的“另见”部分,还有缓冲区处理入口点以提供更多便利。

【讨论】:

  • 不工作,我不认为这是我的问题的解决方案
  • @user789546,那你有什么问题?
【解决方案3】:

Indy 9 不支持 Delphi 2009。请确保您使用的是最新的 Indy 10 版本。在 Indy 10 中,返回 StringTIdHTTP.Post()(和 TIdHTTP.Get())版本将使用服务器指定的任何字符集(在 HTTP Content-Type 标头中或在HTML 本身中的<meta> 标记。

【讨论】:

    猜你喜欢
    • 2010-10-17
    • 2014-02-02
    • 2018-02-06
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多