.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. C#
  5. C#でのURL文字列エンコードの方法とは?デコードの方法もあわせて紹介

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

  • C#
  • プログラミング言語
公開日時:   更新日時:
C#でのURL文字列エンコードの方法とは?デコードの方法もあわせて紹介
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    システム
    エンジニア
    URLエンコードとはどういったプログラムなのでしょうか?

    プロジェクト
    マネージャー
    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のデコードができます。

    システム
    エンジニア
    文字コードの表記パターンが4種類もあるのですね。

    プロジェクト
    マネージャー
    それぞれのメソッドを実際に書いてみて、より理解を深めていってください。

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


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

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    C#新着案件New Job