日本語テキストのURLエンコード

日本語文字(ひらがな・カタカナ・漢字)のURLエンコード方法を解説。CJK文字のUTF-8マルチバイトエンコードの仕組みを学びましょう。

Character

日本語

Encoded

%E6%97%A5...

詳細な説明

URL内の日本語テキストはUTF-8を使ってエンコードされ、各文字は通常3バイト(9つのpercent-encoding文字)を必要とします。日本語はひらがな、カタカナ、漢字(CJK統合漢字)の3つの文字体系を使用し、すべて3バイトUTF-8の範囲に入ります。

エンコード例:

  • 日(日/太陽、漢字):UTF-8バイト E6 97 A5 → %E6%97%A5
  • 本(本/起源、漢字):UTF-8バイト E6 9C AC → %E6%9C%AC
  • 語(語/言語、漢字):UTF-8バイト E8 AA 9E → %E8%AA%9E
  • 日本語(「日本語」):%E6%97%A5%E6%9C%AC%E8%AA%9E

JavaScriptでの動作:

encodeURIComponent("日本語")     // "%E6%97%A5%E6%9C%AC%E8%AA%9E"
encodeURIComponent("こんにちは") // "%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF" (ひらがなで「こんにちは」)
encodeURIComponent("トウキョウ") // "%E3%83%88%E3%82%A6%E3%82%AD%E3%83%A7%E3%82%A6" (カタカナで「トウキョウ」)

// デコード
decodeURIComponent("%E6%97%A5%E6%9C%AC%E8%AA%9E") // "日本語"

URLの長さへの影響: 日本語テキストはpercent-encodingすると劇的に展開されます。各文字が9文字(3バイト、各%XXとしてエンコード)になります。20文字の日本語フレーズは180文字のエンコードテキストを生成します。これはASCIIテキストと比較して9倍の展開です。

歴史的なエンコード問題: UTF-8が普遍的な標準になる前は、日本語URLはShift-JISやEUC-JPエンコードを使用していることが多く、同じ文字に対して異なるバイトシーケンスを生成していました。現代のシステム(2005年以降)はほぼ普遍的にUTF-8を使用していますが、レガシーシステムではまだShift-JISエンコードのURLを生成する場合があります。UTF-8エンコードされた日本語をShift-JISデコーダでデコードすると(またはその逆)、「文字化け」と呼ばれるテキストの崩壊が発生します。

国際化ドメイン名(IDN): 日本語.ジェーピーのような日本語ドメイン名は、Unicodeドメイン名をASCII互換形式に変換するPunycodeエンコード(percent-encodingとは異なるシステム)を使用します。ドメイン日本語.jpはPunycodeでxn--wgv71a309e.jpになります。

落とし穴: 日本語サイト向けの検索URLを構築する場合、アプリケーションが一貫してUTF-8を使用していることを確認してください。どの時点(ブラウザ、プロキシ、サーバー、データベース)でもエンコードを混在させると文字化けが発生します。HTMLフォームにcharsetパラメータを設定し(<form accept-charset="UTF-8">)、HTTP Content-TypeヘッダーでUTF-8を指定してください。

ユースケース

日本語コンテンツの検索URL構築。例えば、日本語WikipediaのAPIクエリや国際化されたECサイトの商品URLの作成など。

Try It — URL Encoder

フルツールを開く