R中的URL / URI编码

时间:2017-12-20 11:14:28

标签: r parsing post encoding get

我必须根据RFC 3986请求带有URL编码的API,因为我知道我的查询中有重音字符。

例如,这个论点:

quel écrivain ?

应该像这样编码:

quel%20%C3%A9crivain%20%3F%0D%0A

不幸的是,当我使用URLencode,encoding,url_encode或curlEscape时,我得到了最终的编码:

URLencode("quel écrivain ?")
[1] "quel%20%E9crivain%20?"

问题在于重音字母:例如“é”被转换为“%E9”而不是“%C3%A9”......

我在使用此URL编码时遇到了麻烦但没有发现任何问题...由于我没有动手使用API​​,我不知道它是如何处理编码的。

一个奇怪的事情是使用POST而不是GET导致一个响应,其中带有重音的单词被切割成两个不同的行:

"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\

如您所见,“écrivain”被分为"<U+FFFD>"(这是“é”的ASCII编码)和"crivain"

我对这个编码问题感到很生气,如果一个聪明的头脑可以帮助我,我将非常感激!

2 个答案:

答案 0 :(得分:0)

我认为我不是一个聪明的头脑,但我仍然有一个可能的解决方案。使用URLencode()之后,似乎您的重音字符被转换为其unicode表示的尾随部分,前面是%。要将你的角色转换为可读的角色,你可以将它们变成真正的unicode&#34;并使用包stringi使其可读。对于你的单个字符串,解决方案至少可以在我的机器上运行。我希望它也适合你。

请注意,我在字符串末尾添加了%字符,以证明以下gsub命令在任何情况下均可用。

您可能必须调整替换模式\\u00,以覆盖超过最后两个位置的unicode模式,但如果这与您的情况相关,则为0

library(stringi)
str <- "quel écrivain ?"
str <- URLencode(str)
#"quel%20%E9crivain%20?"
#replacing % by a single \ backslash to directly get correct unicode representation
#does not work since it is an escape character, therefore "\\"
str <- gsub("%", paste0("\\", "u00"), str , fixed = T)
#[1] "quel\\u0020\\u00E9crivain\\u0020?"
#since we have double escapes, we need the unescape function from stringi
#which recognizes double backslash as single backslash for the conversion
str <- stri_unescape_unicode(str)
#[1] "quel écrivain ?"

答案 1 :(得分:0)

设置 public enum ItemTypes { Add = 1, Remove = 2 }

reserved = TRUE