2010-12-13 3 views
4

違いの間は何を次のようになります。HttpUtility.UrlEncode標準エンコードと指定エンコード

HttpUtility.UrlEncode("some string with é and β and stuff") 
HttpUtility.UrlEncode("some string with é and β and stuff", Encoding.UTF8) 
HttpUtility.UrlEncode("some string with é and β and stuff", Encoding.Default) 

結果である:テストする場合

some+string+with+%c3%a9+and+%ce%b2+and+stuff 
some+string+with+%c3%a9+and+%ce%b2+and+stuff 
some+string+with+%e9+and+%df+and+stuff 

、私は最初の2のために同じ結果を得るので、私は安全にUTF8がない限り、デフォルトであると仮定することができます異なるシステムで異なることがありますか?

私はこのようになりますUnicodeエスケープシーケンスの例seeneいる:PayPalは彼らのIPN-要求であることを送信することをかなり一定

%のu00e9(E)

を。なぜ.NETのようなエンコードはしませんか?

+0

HttpUtility.UrlEncodeメソッドは、デフォルトでUTF-8エンコーディングを使用します。したがって、UrlEncodeメソッドを使用すると、UrlEncodeメソッドを使用し、UTF8を2番目のパラメーターとして指定するのと同じ結果が得られます。 http://msdn.microsoft.com/pt-br/library/4fkewx0t(v=vs.110).aspx – Tony

答えて

6

リフレクターからの方法HttpUtility.UrlEncode Method (String)のソースコード:あなたの質問に

public static string UrlEncode(string str) 
{ 
    if (str == null) 
    { 
     return null; 
    } 
    return UrlEncode(str, Encoding.UTF8); 
} 

に:

ので、私は安全に

を指定しない限りUTF8がデフォルトであると仮定することができますはい、できます。

+0

また、「異なるシステムで異なることがありますか?」と尋ねました。 - Monoは同じUTF8を使用します。しかし、Microsoftは、MSDNに**デフォルトで想定されているエンコーディングを**記載しておくべきです。誰もデフォルトがEncodingだと思うかもしれません.Default –

+0

申し訳ありませんが、非常に徹底的な答え、ありがとうございます。はい、Encoding.Defaultは実際には「デフォルト」であることを意味します。 – jishi

3

はい、上記の例に基づいてUTF8がデフォルトであるとは限りません。 .NETでのデフォルトのエンコーディングは、オペレーティングシステムの基礎となるコードページによって決まることに注意してください。

PayPalから見た '%u00e9'の例は、実際にはUnicode文字をエンコードするためのnon-standard implementationです。 Wikipediaによると、この実装はW3Cによって拒否されました。

+0

さて、非標準的な実装は、知っておいたよ! – jishi

+2

実際、それを送ったのはpaypalではありませんでした。 ASP.NETのように、それをRequest.Form Collectionの非標準実装に変換します。生データ:&address_street =%C3%A5lderstigen、Request.Form data =&address_street =%u00e5lderstigen、DOH! – jishi

関連する問題