我试图在Delphi中使用下面的URL进行GET。TIdHTTO
但却失败了。
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过程中处理非英文字符时,是否需要特殊处理?如果需要,如何处理?
我使用的是Delphi 10.2,如果这有帮助的话。
URL不允许使用非ASCII字符(IRI允许,但这些字符还没有被广泛使用)。 在URL中,你必须对任何非ASCII字符(和其他保留字符)进行url-encode,比如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
格式,例如
请注意 上海
成为 %E4%B8%8A%E6%B5%B7
.
Web浏览器、POSTMAN等都会在内部为你处理这个问题。 你可以通过查看实际传输的原始HTTP请求来确认这一点。