如果我们尝试在 TIdHTTP 中以中文单词作为参数执行 GET,我们需要什么特殊处理



我试图使用TIdHTTO在德尔福中获取以下URL,但失败了:

https://api.sketchengine.eu/bonito/run.cgi/wsketch?lemma=上海&username=agofpos&api_key=ce39ab3f07544e759b068338ac1974e2&corpname=preloaded/zhtenten17_simplified_stf2&format=json

不过,使用POSTMAN是可以的。

这是我的代码:

url := 'https://api.sketchengine.eu/bonito/run.cgi/wsketch?lemma=上海&username=agofpos&api_key=ce39ab3f07544e759b068338ac1974e2&corpname=preloaded/zhtenten17_simplified_stf2&format=json';
memoResult.Text := idHttp.Get(url);

在 GET 期间处理非英文字符时,我们是否需要特殊处理?如果是这样,如何?

我正在使用德尔福 10.2,如果有帮助的话。

URL不允许使用非ASCII字符(IRI允许,但尚未广泛使用(。 在 URL 中,您必须对任何非 ASCII 字符(和其他保留的(字符进行 url 编码,例如使用 Indy 的TIdURI类,例如:

uses
..., IdURI;
url := 'https://api.sketchengine.eu/bonito/run.cgi/wsketch?lemma=' + TIdURI.ParamsEncode('上海') + '&username=agofpos&api_key=ce39ab3f07544e759b068338ac1974e2&corpname=preloaded/zhtenten17_simplified_stf2&format=json';
memoResult.Text := idHttp.Get(url);

这会将中文字符编码为 UTF-8,然后以%HH格式对这些字节进行编码,例如:

https://api.sketchengine.eu/bonito/run.cgi/wsketch?lemma=%E4%B8%8A%E6%B5%B7&username=agofpos&api_key=ce39ab3f07544e759b068338ac1974e2&corpname=preloaded/zhtenten17_simplified_stf2&format=json

请注意上海是如何变得%E4%B8%8A%E6%B5%B7的。

Web浏览器,POSTMAN等在内部为您处理此问题。 您可以通过查看实际传输的原始 HTTP 请求来确认这一点。

相关内容

最新更新