.net column
.NET開発者のためのブログメディア

C#でのURL文字列エンコードの方法とは?デコードの方法もあわせて紹介

 
C#でのURL文字列エンコードの方法とは?デコードの方法もあわせて紹介
基本情報技術者試験の試験対策はこちら>>

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

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

C#でのURLのエンコードとは?


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

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

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

C#でのURLエンコードの方法4つ


C#では4種類の方法でURLエンコードができます。
そして、それぞれの方法で文字列をどのようにエンコードするかが異なります。

では、それぞれの方法について、実際のソースコードとエンコード例を交えて紹介します。

1: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”を指定すると、指定した文字コードでエンコードします。

2:WebUtility.UrlEncodeメソッド

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

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

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

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

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

3:Uri.EscapeDataStringメソッド

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

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

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

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

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

4:Uri.EscapeUriStringメソッド

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

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

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

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

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

プログラミング言語における文字列型とは


まず、文字列とはテキストを表すために使用される0以上の文字からなる順序のある集合のことです。
例えば、”abc”、”あいうえお”、”!”、””などが文字列になります。
そして、プログラミング言語において、このような文字列を扱うための型が文字列型と呼ばれるものになります。

C#でのstring型について

C#での基本の文字列型はstring型になります。

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

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

このように文字列をstring型の変数に格納し、操作ができます。

string型の問題点

C#のstring型はUTF-16という文字コードでデータを格納しています。
これはstring型で格納された文字列をバイト単位で出力することで確かめられます。

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

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

出力内容は1行目のそれぞれ1文字が2行目の2バイトに対応しています。
つまり「あ」が「42 30」と対応しており、これはUTF-16の文字コードと合致します。
これにより、string型の文字列の文字コードはUTF-16であるとわかります。

しかし、昨今のWebアプリケーションなどではUTF-8という文字コードを使用するのが一般的です。
UTF-8形式の文字列を扱うにあたり、わざわざUTF-16に文字コード変換して処理するとなるとコストがかかってしまいます。
そのため、C#でUTF-8のまま文字列処理ができるような機能が求められています。

C#でのUtf8String型について

そこで、考案されているものがUtf8String型というデータ型です。
これによりUTF-8形式のデータをそのまま扱えます。

実際のソースコードを見てみましょう。
(ここではMicrosoft.Azure.Cosmos.Core.Utf8のUtf8Stringを使用しています)

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

出力内容の1行目はUTF-8でのバイト列になります。
このように、Utf8Stringを使用することでUTF-8のバイト列を文字列としてそのまま扱えるようになります。

C#でのURLデコードの方法


ここまでURLエンコードについて説明してきましたが、エンコードによって変換された文字列はしかるべきタイミングで元の状態に戻す必要があります。
この元の状態に戻す処理のことをデコードと呼びます。

C#ではURLデコードの方法が2種類あります。
それぞれの方法について、実際のソースコードとデコード例を交えて紹介します。

HttpUtility.UrlDecodeメソッドを使用

C#ではHttpUtility.UrlDecodeメソッドを使って、URLのデコードができます。

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

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

エンコード方式を問わず、文字列の復元ができています。
半角スペースに関しても、「+」、「%20」どちらも復元されています。

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

Uri.UnescapeDataStringメソッドを使用

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

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

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

こちらの方法でも基本的に文字列の復元ができますが、「+」のみ半角スペースへの復元ができません。
そのため、HttpUtility.UrlEncodeやWebUtility.UrlEncodeでエンコードされたものに対して使用すると、半角スペースのみ復元できない可能性があります。
C#ではUri.EscapeDataStringやUri.EscapeUriStringに対応して使うと良いでしょう。

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

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

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

C#でのURL文字列エンコードの方法を知ろう


C#でのURLのエンコード方法を4種類、デコード方法を2種類紹介しました。
また、C#における文字列型とその問題点についても紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。


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

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

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

Search

Popular

reccomended

Categories

Tags