【问题标题】:Delphi 7 - Charset REST JSONDelphi 7 - 字符集 REST JSON
【发布时间】:2017-03-05 11:21:14
【问题描述】:

在 Delphi 7 和 Indy 9.00.10 中,我使用的是带有 JSON 的 REST API。 我用这样的 TidHTTP 组件创建了一个 GET 请求。

IdHTTP1.HandleRedirects := True;
IdHTTP1.ReadTimeout     := 5000;
IdHTTP1.Request.Accept  := 'application/json';
IdHTTP1.Request.AcceptCharSet  := 'UTF-8';
IdHTTP1.Request.AcceptLanguage := 'sv';
IdHTTP1.Request.ContentType    := 'application/json';
Memo1.Text := IdHTTP1.Get('http://api.arbetsformedlingen.se/af/v0/platsannonser/7088149');

我尝试了几个字符集,但无法更正响应中的瑞典字符,如 å,ä,ö。

  • å 变成 Ã¥
  • ä 变成 ä
  • ö 变为 ö¶

我在这里做错了什么?

【问题讨论】:

  • 回复以<?xml version="1.0" encoding="UTF-8" standalone="yes"?>开头。
  • 感谢您提供更多信息。现在,当我尝试时,我可以清楚地看到备忘录中正确的 ä、ö 和 å 字符,例如"konsult om du söker en värld av"
  • 奇怪,我仍然得到这个 link 我正在使用 Delphi 7 和 Indy 9.00.10

标签: json rest delphi character-encoding indy


【解决方案1】:

在 Delphi 7 System 单元中有一个 UTF8ToAnsi() 函数。像这样使用:

  Memo1.Text := UTF8ToAnsi(IdHTTP1.Get('http://api.arbetsformedlingen.se/af/v0/platsannonser/7088149'));

结果在 Delphi 7 中是正确的。

【讨论】:

  • 你在这个话题上很有帮助。感谢您,我们得出的结论是 Delphi 7 不支持 Unicode。在 2017 年今天将 UTF-8 转换为 ANSI 感觉完全错误,但在这种情况下,这将是正确的方法。否则,我总是到处使用 UTF-8!
  • Delphi 7 没有完整的 Unicode 支持。它的默认字符串类型使用 ANSI 编码。如果您想在 2017 年获得完整的 Unicode 支持,请升级到新版本。 Delphi 7 已经超过 15 年了。
  • @TomBrunberg 抱歉,我的话是针对 OP 的。
  • 使用 Delphi 7 没有任何问题。并提出相关问题。并回答他们,但是当一个人使用这样的旧版本时,它必须接受它的缺点。抱怨 Delphi 7 使用 ANSI 毫无意义。
  • 在 Delphi 7 中,您可以使用 UTF8Decode() 将 UTF-8 编码的 AnsiString 解码为 Unicode WideString。但是在这种情况下,最好使用TIdHTTP.Get()TStream 版本,这样您就可以将原始XML 数据按原样传递给您选择的XML 解析器。不要将 XML 解析为 Ansi 字符串。让 XML 引擎使用 XML 的实际字符集为您解析它。
猜你喜欢
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多