2016-05-27 11 views
1

は、私はちょうどUTF-8コード表記の接頭辞についてのだろうか。バックスラッシュ記号(\)を使用して\uc774\ud2b8と表示される場合もあります。しかし、パーセント記号(%)を使ってコードを見つけることもできます。例えば%uc774%ud2b8
は、私が使用してどのような近代的なブラウザでも問題ありませんが、私はパーセント表記を使用する場合、NSURLはNULL URLを含むオブジェクトを返すコードを認識することはできません。UTF-8エンコーディングプレフィックスnotiation "パーセント(%)" "バックスラッシュ()" 対

UTF-8コードの正しい表記法は、NSURLのプレフィックス付きURL文字列を使用するとどのように問題を解決できますか?

EDIT:私は単語UTF-8に間違っていました。 UTF-8 encodingではなくUnicode character setを参照するのは正しいです。

+0

URLにUTF-8文字をエンコードする方法についてお話していますか? – trojanfoe

+0

URLだけでなく、2つの接頭辞の違いについて質問します。さらに、NSURLは%表記では機能しないため、問題の解決方法については疑問に思っています(iOSで)。 – Aigori

+0

OKこれは、特定の言語が文字列リテラルでUTF-8文字をどのようにエンコードするかを示しています。だから、オペレーティングシステムではなく、あなたが話している言語についてより具体的にする必要があります。 – trojanfoe

答えて

1

これは、UTF-8とは何の関係もありません。 \u表記は、さまざまな言語(C、Java)で使用され、Unicode文字を文字列にエンコードします。文字列"\uc774\ud2b8"が検出されると、一般的に、それはバイトシーケンス0xEC 0x9D 0xB4 0xED 0x8A 0xB8だ意味し、UTF-8でエンコードされます。しかし、0xC774 0xD2B8(UTF-16)のような他の方法でエンコードすることもできます。それはあなたのシステムによって異なります。しかし、要点は、この文字列が2つのユニコード文字であることです。

%符号化は完全に異なっています。 RFC 3986で定義されているURI予約文字のパーセントエンコーディング標準です。コンパイラが"%uc774%ud2b8"を検出したときには、「%」「U」「7」「7」「4」、等としてそれをコードする(典型的には、UTF-8でこれらのそれぞれをコードするが、それはシステムに依存します)。ほとんどの言語は%を特別扱いしません。 \u(および一般に\)は、言語の一部です。 %はありません。したがって、この文字列は12個のUnicode文字です。言語は%を気にしません。 URLパーサーが行います。

のiOSがNSURLに文字列を変換するためには、文字列が正しくエンコードされなければなりません。これには、URLの一部でパーセントエンコーディングが含まれ、URLの他の部分でパーセントエンコーディングが禁止されている可能性があります(パーセントエンコードされているか、またはパーセントエンコードされている必要があります)。このルールはRFC 3986に記載されています。

+0

ありがとうございます、ネイピア!これは私にとっては非常に明確です。 – Aigori

0

あなたがすることによってこれを行うことができ、

旧のmyStringは持っパーセントをurlstringされ、NEWSTRINGは、ご希望の文字列である

NSString * newString = [myString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //Deprecated now 

をmthod。

新しい方法:

NSString * newString = [myString stringByRemovingPercentEncoding]; 

希望これは役立ちます:)

+0

残念ながら、 'stringByRemovingPercentEncoding'や' stringByReplacingPercentEscapesUsingEncoding'はこの文字列 'nil'を返す' [@ "http://www.example.org/index.html?arg =%uc774%ud2b8 "stringByRemovingPercentEncoding]' – Aigori