
C#でURL文字列のエンコードの方法を紹介
目次
C#でのURLのエンコードについて
今回は、C#でのURLのエンコードについて説明します。
URLエンコードとは、URLでは使えない文字を変換することです。
例えば、「あ」は「%e3%81%82」に変換されます。
URLはアルファベットだけで表現する必要があるため、このように変換します。
C#でのURLのエンコードに興味のある方はぜひご覧ください。
HttpUtility.UrlEncodeメソッド
C#ではHttpUtility.UrlEncodeメソッドを使って、URLのエンコードができます。
HttpUtilityクラスを使用するには、System.Web.dllを参照設定に追加してください。
どのようにエンコードされるか、実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
Console.WriteLine(System.Web.HttpUtility.UrlEncode(""abcdefg"")); Console.WriteLine(System.Web.HttpUtility.UrlEncode(""ABCDEFG"")); Console.WriteLine(System.Web.HttpUtility.UrlEncode(""0123456"")); Console.WriteLine(System.Web.HttpUtility.UrlEncode(""!()_-*."")); Console.WriteLine(System.Web.HttpUtility.UrlEncode(""あいうえお"")); Console.WriteLine(System.Web.HttpUtility.UrlEncode(""アイウエオ"")); Console.WriteLine(System.Web.HttpUtility.UrlEncode(""亜伊宇絵尾"")); Console.WriteLine(System.Web.HttpUtility.UrlEncode("" "")); Console.WriteLine(System.Web.HttpUtility.UrlEncode(""?#$%&|@\\/[]{}<>+=^~\""'`;:,"")); |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
abcdefg ABCDEFG 0123456 !()_-*. %e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a %e3%82%a2%e3%82%a4%e3%82%a6%e3%82%a8%e3%82%aa %e4%ba%9c%e4%bc%8a%e5%ae%87%e7%b5%b5%e5%b0%be + %3f%23%24%25%26%7c%40%5c%2f%5b%5d%7b%7d%3c%3e%2b%3d%5e%7e%22%27%60%3b%3a%2c |
HttpUtility.UrlEncodeメソッドがエンコードするのは、「a~z」、「A~Z」、「0~9」、「!」、「(」、「)」、「_」、「-」、「*」、「.」以外の文字です。
ただし、半角スペースは「+」にエンコードされます。
それ以外は、文字コードを16進数文字列に変換し、2桁ごとに「%」を付けた形式にエンコードされます。
このように、C#ではHttpUtility.UrlEncodeメソッドを使って、URLのエンコードができます。
文字コードの指定
HttpUtility.UrlEncodeメソッドでは、文字コードを指定しないとUTF-8としてエンコードします。
文字コードの指定による違いを確認するため、実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
string str = ""あいうえお""; System.Text.Encoding enc_utf8 = System.Text.Encoding.GetEncoding(""UTF-8""); System.Text.Encoding enc_euc = System.Text.Encoding.GetEncoding(""euc-jp""); System.Text.Encoding enc_sjis = System.Text.Encoding.GetEncoding(""Shift_Jis""); Console.WriteLine(System.Web.HttpUtility.UrlEncode(str)); Console.WriteLine(System.Web.HttpUtility.UrlEncode(str, enc_utf8)); Console.WriteLine(System.Web.HttpUtility.UrlEncode(str, enc_euc)); Console.WriteLine(System.Web.HttpUtility.UrlEncode(str, enc_sjis)); |
実行結果は以下のようになります。
1 2 3 4 5 6 7 |
%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a %e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a %a4%a2%a4%a4%a4%a6%a4%a8%a4%aa %82%a0%82%a2%82%a4%82%a6%82%a8 |
文字コードを指定しないとUTF-8としてエンコードすることが分かります。
“”euc-jp””や””Shift_Jis””を指定すると、指定した文字コードでエンコードします。
WebUtility.UrlEncodeメソッド
C#ではWebUtility.UrlEncodeメソッドを使って、URLのエンコードができます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
Console.WriteLine(System.Net.WebUtility.UrlEncode(""abcdefg"")); Console.WriteLine(System.Net.WebUtility.UrlEncode(""ABCDEFG"")); Console.WriteLine(System.Net.WebUtility.UrlEncode(""0123456"")); Console.WriteLine(System.Net.WebUtility.UrlEncode(""!()_-*."")); Console.WriteLine(System.Net.WebUtility.UrlEncode(""あいうえお"")); Console.WriteLine(System.Net.WebUtility.UrlEncode(""アイウエオ"")); Console.WriteLine(System.Net.WebUtility.UrlEncode(""亜伊宇絵尾"")); Console.WriteLine(System.Net.WebUtility.UrlEncode("" "")); Console.WriteLine(System.Net.WebUtility.UrlEncode(""?#$%&|@\\/[]{}<>+=^~\""'`;:,"")); |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
abcdefg ABCDEFG 0123456 !()_-*. %E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A %E3%82%A2%E3%82%A4%E3%82%A6%E3%82%A8%E3%82%AA %E4%BA%9C%E4%BC%8A%E5%AE%87%E7%B5%B5%E5%B0%BE + %3F%23%24%25%26%7C%40%5C%2F%5B%5D%7B%7D%3C%3E%2B%3D%5E%7E%22%27%60%3B%3A%2C |
HttpUtility.UrlEncodeメソッドは16進数小文字でしたが、WebUtility.UrlEncodeメソッドは16進数大文字でエンコードされることが分かります。
このように、C#ではWebUtility.UrlEncodeメソッドを使って、URLのエンコードができます。
Uri.EscapeDataStringメソッド
C#ではUri.EscapeDataStringメソッドを使って、URLのエンコードができます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
Console.WriteLine(Uri.EscapeDataString(""abcdefg"")); Console.WriteLine(Uri.EscapeDataString(""ABCDEFG"")); Console.WriteLine(Uri.EscapeDataString(""0123456"")); Console.WriteLine(Uri.EscapeDataString(""_-.~"")); Console.WriteLine(Uri.EscapeDataString(""あいうえお"")); Console.WriteLine(Uri.EscapeDataString(""アイウエオ"")); Console.WriteLine(Uri.EscapeDataString(""亜伊宇絵尾"")); Console.WriteLine(Uri.EscapeDataString("" "")); Console.WriteLine(Uri.EscapeDataString(""!()*?#$%&|@\\/[]{}<>+=^\""'`;:,"")); |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
abcdefg ABCDEFG 0123456 _-.~ %E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A %E3%82%A2%E3%82%A4%E3%82%A6%E3%82%A8%E3%82%AA %E4%BA%9C%E4%BC%8A%E5%AE%87%E7%B5%B5%E5%B0%BE %20 %21%28%29%2A%3F%23%24%25%26%7C%40%5C%2F%5B%5D%7B%7D%3C%3E%2B%3D%5E%22%27%60%3B%3A%2C |
Uri.EscapeDataStringメソッドは、「a~z」、「A~Z」、「0~9」、「_」、「-」、「.」、「~」以外の文字をエンコードします。
ただし、半角スペースは「%20」にエンコードします。
これは、RFC3986に従ったエンコード方法です。
このように、C#ではUri.EscapeDataStringメソッドを使って、URLのエンコードができます。
Uri.EscapeUriStringメソッド
C#ではUri.EscapeUriStringメソッドを使って、URLのエンコードができます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Console.WriteLine(Uri.EscapeUriString(""abcdefg"")); Console.WriteLine(Uri.EscapeUriString(""ABCDEFG"")); Console.WriteLine(Uri.EscapeUriString(""0123456"")); Console.WriteLine(Uri.EscapeUriString(""_-.~"")); Console.WriteLine(Uri.EscapeUriString(""!()*?#$&@/[]+=';:,"")); Console.WriteLine(Uri.EscapeUriString(""%|\\{}<>^\""`"")); Console.WriteLine(Uri.EscapeUriString(""あいうえお"")); Console.WriteLine(Uri.EscapeUriString(""アイウエオ"")); Console.WriteLine(Uri.EscapeUriString(""亜伊宇絵尾"")); Console.WriteLine(Uri.EscapeUriString("" "")); |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
abcdefg ABCDEFG 0123456 _-.~ !()*?#$&@/[]+=';:, %25%7C%5C%7B%7D%3C%3E%5E%22%60 %E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A %E3%82%A2%E3%82%A4%E3%82%A6%E3%82%A8%E3%82%AA %E4%BA%9C%E4%BC%8A%E5%AE%87%E7%B5%B5%E5%B0%BE %20 |
Uri.EscapeUriStringはUri.EscapeDataStringメソッドに加えて「!」、「(」、「)」、「*」、「?」、「#」、「$」、「&」、「@」、「/」、「[」、「]」、「+」、「=」、「’」、「;」、「:」、「,」をエンコードしません。
これらの文字をエンコードしたくない場合は、Uri.EscapeUriStringを使用します。
このように、C#ではUri.EscapeUriStringメソッドを使って、URLのエンコードができます。
まとめ
いかがでしたでしょうか。
C#でのURLのエンコード方法を4種類紹介しました。
また、文字コードの指定方法についても紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。