我必须根据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"
。
我对这个编码问题感到很生气,如果一个聪明的头脑可以帮助我,我将非常感激!
答案 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