2017-12-20 18 views
0

私はクエリにアクセント記号付きの文字があることを知っているので、RFC 3986に従ってURLエンコーディングを持つAPIをリクエストする必要があります。例えばURL/URIエンコーディングR

、この引数:

quel écrivain ? 

は次のように符号化されるべきである:

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

残念ながら、私はURLENCODE、符号化、URL_ENCODE、又はcurlEscapeを使用する場合、私が得られた符号を有します。

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

問題はアクセント付きの文字です。たとえば、 "é"はintに変換されます。 o "%C3%A9"の代わりに "%E9%" ...

私はこのURLエンコーディングに問題を見出すことなく苦労しています...私はAPIを手にしていないので、わかりませんエンコーディングの処理方法("<U+FFFD>"に分割されている「écrivain」、

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

あなたが見ることができるように:

奇妙なことではなくGETのPOSTを使用してアクセントを持つ単語が2つの異なるラインにcuttedされている応答につながることがありますこれは "é"のASCIIエンコーディング)と"crivain"です。

私はこのようなエンコーディングの問題で怒っています。華麗な心が私を助けてくれたら、私はとても感謝しています!

答えて

0

私は素晴らしいアイデアだとは思わないが、まだ解決策がある。 URLencode()を使用した後では、アクセント付きの文字は、%が前に付いているユニコード表現の末尾部分に変換されているようです。文字を読みやすい文字に変換するには、それらを「実際のUnicode」に変換し、パッケージstringiを使用して読みやすくします。あなたの単一の文字列については、ソリューションは私のマシン上で動作しました。私はそれもあなたのために働くことを望む。

文字列の末尾に%文字が追加されていますので、gsubコマンドはどのような場合でも動作するはずです。

置換パターン\\u00を変更する必要があります。最後に2つ以上の位置にある数字が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

ありがとうマヌエル、私はまったく同じことをしませんでしたが、 'stri_unescape_unicode'はコールするのに良い機能でした! 1.最初に私のPOSTクエリの本体に 'stri_escape_unicode'を適用しました。 2.次に、私は' stri_unescape_unicode'関数をレスポンスの内容に使用しました。 – Tau

+0

私はあなたを実用的なソリューションに導くことができてうれしいです。誰かがかつて「エンコーディングはプログラマを怒らせるだけのものだ」と言った:-) –

+0

もっと同意できませんでした;) – Tau

関連する問題