日本語テキストの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の作成など。