MCPで接続 →

計算を入力してください

公式

広告

結果

結果
hello%20world%21
入力文字数 12
出力文字数 16

URLエンコードとは?

URLエンコード(パーセントエンコーディングとも呼ばれます)は、RFC 3986で定義された仕組みで、任意のデータをURI(統一資源識別子)の中で安全に表現するために使われます。スペース、スラッシュ、疑問符、アンパサンド、そして日本語などの非ASCII文字といった多くの文字は、URLの中で特別な意味を持っていたり、そのままでは使えなかったりします。パーセントエンコーディングでは、こうしたバイトを1つずつ、パーセント記号(%)とそのバイト値を表す2桁の16進数に置き換えます。

スペース文字がパーセントエンコードされたバイトに対応する図
URLエンコード時に、安全でない文字は%XX形式の16進バイトに変換されます。

このツールの使い方

プレーンテキストをURLで安全に使える文字列に変換するにはエンコードを、パーセントエンコードされた文字列を読める形に戻すにはデコードを選びます。テキストを入力または貼り付けて実行するだけです。入力と出力それぞれの文字数も表示されるので、エンコードによって文字列がどれだけ長くなったかをひと目で確認できます。

変換の仕組み

非予約(unreserved)文字の集合はA–Z a–z 0–9 - _ . ~です。この集合に含まれないバイトはすべてエンコード対象になります。エンコードの処理は次のように表せます。

$$\text{Output} = \operatorname{encode}\!\left(\text{Text}\right) = \text{each byte} \to \begin{cases} \text{char}, & \text{if unreserved } (A\text{-}Z,\,a\text{-}z,\,0\text{-}9,\,\text{-}\_.\sim) \\ \text{\%XX}, & \text{otherwise (UTF-8 hex)} \end{cases}$$

たとえばスペースのバイト値は32で、16進数では0x20にあたるため、%20に変換されます。テキストはまずUTF-8でバイト列に変換されるので、絵文字やアクセント付き文字などのマルチバイト文字も、1バイトずつエンコードされます。デコードはこの逆の処理で、各%XXの3文字を16進バイトとして解釈し、集めたバイト列をUTF-8として読み戻します。

$$\text{Output} = \operatorname{decode}\!\left(\text{Text}\right) = \text{scan} \to \begin{cases} \text{byte}(XX), & \text{for each } \text{\%XX} \\ \text{space}, & \text{for } + \\ \text{char}, & \text{otherwise} \end{cases}\ \text{as UTF-8}$$
バイトが2桁の16進数に分割されパーセントコードを形成する図
安全でない各バイトは、パーセント記号とそれに続く2桁の16進数になります。

具体例で確認

hello world!をエンコードしてみましょう。h-e-l-l-oの各文字は非予約文字なのでそのまま残ります。スペースは%20に、感嘆符(バイト値33=0x21)は%21になります。その結果、hello%20world%21が得られます。

よくある質問

プラス記号はスペースとしてエンコードされますか? エンコード時、スペースは%20(RFC 3986形式)に変換されます。デコード時は、フォームデータとの互換性のため、リテラルの+はスペースとして扱われます。

なぜ変換されない文字があるのですか? 英字、数字、そして4つの非予約記号- _ . ~は、RFC 3986のもとでエンコードが不要なためです。

Unicodeに対応していますか? はい。テキストはUTF-8として処理されるため、ASCII以外の文字は複数の%XXバイトとしてエンコードされ、デコード時にも正しく元へ戻ります。

最終更新: