.net column

.NET開発者のためのブログメディア
カーソルの移動

C#でURL文字列のエンコードの方法を紹介

2020年08月27日

SE
URLエンコードとはどういったプログラムなのでしょうか?

PM
URLで表記されない文字や記号を特殊な組み合わせで表記する変換記号のことです。詳しくみていきましょう。

C#でのURLのエンコードについて

今回は、C#でのURLのエンコードについて説明します。

URLエンコードとは、URLでは使えない文字を変換することです。
例えば、「あ」は「%e3%81%82」に変換されます。
URLはアルファベットだけで表現する必要があるため、このように変換します。

C#でのURLのエンコードに興味のある方はぜひご覧ください。

HttpUtility.UrlEncodeメソッド

C#ではHttpUtility.UrlEncodeメソッドを使って、URLのエンコードができます。
HttpUtilityクラスを使用するには、System.Web.dllを参照設定に追加してください。

どのようにエンコードされるか、実際のソースコードを見てみましょう。

実行結果は以下のようになります。

HttpUtility.UrlEncodeメソッドがエンコードするのは、「a~z」、「A~Z」、「0~9」、「!」、「(」、「)」、「_」、「-」、「*」、「.」以外の文字です。
ただし、半角スペースは「+」にエンコードされます。
それ以外は、文字コードを16進数文字列に変換し、2桁ごとに「%」を付けた形式にエンコードされます。

このように、C#ではHttpUtility.UrlEncodeメソッドを使って、URLのエンコードができます。

文字コードの指定

HttpUtility.UrlEncodeメソッドでは、文字コードを指定しないとUTF-8としてエンコードします。

文字コードの指定による違いを確認するため、実際のソースコードを見てみましょう。

実行結果は以下のようになります。

文字コードを指定しないとUTF-8としてエンコードすることが分かります。
“”euc-jp””や””Shift_Jis””を指定すると、指定した文字コードでエンコードします。

WebUtility.UrlEncodeメソッド

C#ではWebUtility.UrlEncodeメソッドを使って、URLのエンコードができます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

HttpUtility.UrlEncodeメソッドは16進数小文字でしたが、WebUtility.UrlEncodeメソッドは16進数大文字でエンコードされることが分かります。

このように、C#ではWebUtility.UrlEncodeメソッドを使って、URLのエンコードができます。

Uri.EscapeDataStringメソッド

C#ではUri.EscapeDataStringメソッドを使って、URLのエンコードができます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

Uri.EscapeDataStringメソッドは、「a~z」、「A~Z」、「0~9」、「_」、「-」、「.」、「~」以外の文字をエンコードします。
ただし、半角スペースは「%20」にエンコードします。
これは、RFC3986に従ったエンコード方法です。

このように、C#ではUri.EscapeDataStringメソッドを使って、URLのエンコードができます。

Uri.EscapeUriStringメソッド

C#ではUri.EscapeUriStringメソッドを使って、URLのエンコードができます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

Uri.EscapeUriStringはUri.EscapeDataStringメソッドに加えて「!」、「(」、「)」、「*」、「?」、「#」、「$」、「&」、「@」、「/」、「[」、「]」、「+」、「=」、「’」、「;」、「:」、「,」をエンコードしません。
これらの文字をエンコードしたくない場合は、Uri.EscapeUriStringを使用します。

このように、C#ではUri.EscapeUriStringメソッドを使って、URLのエンコードができます。

SE
文字コードの表記パターンが4種類もあるのですね。

PM
それぞれのメソッドを実際に書いてみて、より理解を深めていってください。

まとめ

いかがでしたでしょうか。
C#でのURLのエンコード方法を4種類紹介しました。
また、文字コードの指定方法についても紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)