我必须根据 RFC 3986 请求带有 URL 编码的 API,因为我知道我的查询中有重音字符。
例如,这个论点:
quel écrivain ?
Run Code Online (Sandbox Code Playgroud)
应该像这样编码:
quel%20%C3%A9crivain%20%3F%0D%0A
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我使用 URLencode、encoding、url_encode 或 curlEscape 时,我得到了编码结果:
URLencode("quel écrivain ?")
[1] "quel%20%E9crivain%20?"
Run Code Online (Sandbox Code Playgroud)
问题出在重音字母上:例如“é”被转换为“%E9”而不是“%C3%A9”......
我在使用这种 URL 编码时没有发现任何问题……因为我不了解 API,所以我不知道它是如何处理编码的。
奇怪的是,使用 POST 而不是 GET 会导致响应,其中带有重音的单词被切成 2 行:
"1\tquel\tquel\tDET\tDET\tGender=Masc|Number=Sing\t5\tdet\t0\t_\n4\t<U+FFFD>\t<U+FFFD>\tSYM\tSYM\t_\t5\tcompound\t0\t_\n5\tcrivain\tcrivain\
Run Code Online (Sandbox Code Playgroud)
如您所见,“écrivain”被拆分为"<U+FFFD>"(这是“é”的 ASCII 编码)和"crivain".
我对这个编码问题很生气,如果有聪明的头脑可以帮助我,我将不胜感激!