【Java】encodeで文字列をURLエンコードする!
URLに日本語が含まれた場合、ブラウザによっては日本語部分が認識できず、正しくリンクされない事があるかと思います。
それはブラウザが基本的には半角英数字や一部の半角記号しか扱えない為です。
しかし、最近のブラウザは日本語のURLにも対応してきており、半角英数字や記号に変換するURLエンコードの処理をブラウザ側が行っています。
文字列をURLエンコードするにはURLEncorderクラスのencodeメソッドを使用します。
encodeメソッドは指定した文字列をURLエンコードメソッドとなります。
デフォルトの場合はuft-8でURLエンコードされますが、文字コードを指定することで文字コードを設定してURLエンコードができます。
今回はURLEncorderクラスのencodeメソッドを使って以下の場合で文字列をURLエンコードしていきます。
⚫︎ 文字列をuft-8でURLエンコードする場合
⚫︎ 文字列をuft-16でURLエンコードする場合
⚫︎ 文字列をWindows-31JでURLエンコードする場合
⚫︎ 文字コードを指定せずに文字列をURLエンコードする場合
目次
エンコードとは
エンコードとはデータを他の形式へ変換することです。
例えば、URLにはアルファベットとなっていますが日本語を入力した場合、対応したアルファベットの組み合わせに置き換えられます。
このように「URLで使えない文字」を「URLに使える文字の組み合わせ」に置き換えることを「URLエンコード」といいます。
encodeメソッドとは
URLEncorderクラスのencodeメソッドとは文字列をURLエンコードするメソッドとなります。
encodeメソッドの書き方
encodeメソッドの構文は下記となります。
1 |
URLEncorder.encode(文字列, [文字符号化方式]) |
パラメータ
⚫︎ 文字列:
エンコードしたい文字列を指定します
⚫︎ 文字コード(任意):
エンコードする際の文字コードを指定します(uft-8やuft-16など)
encodeメソッドの第一パラメータに文字列, 第二パラメータに文字符号化方式を指定することで()に指定した文字列をURLエンコードします。
第二パラメータを指定せずにencodeメソッドを呼び出した場合は、uft-8で文字列をURLエンコードします。
文字列をURLエンコードするサンプルコード
文字列をuft-8でURLエンコードする場合
文字列をURLエンコードするサンプルコードを紹介します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 文字列をURLエンコードするクラス import java.net.URLEncoder; public class Main { public static void main(String[] args) throws Exception { // 変換対象 String str = "abcABC+-こんにちは"; System.out.println("変換前:" + str); // UTF-8でのURLエンコード String encodeStr = URLEncoder.encode(str, "utf-8"); System.out.println("UTF-8 :" + encodeStr); } } |
出力結果
変換前:abcABC+-こんにちは
UTF-8 :abcABC%2B-%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF
encodeメソッドによって文字列がuft-8でエンコードされています。
文字列をuft-16でURLエンコードする場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 文字列をURLエンコードするクラス import java.net.URLEncoder; public class Main { public static void main(String[] args) throws Exception { // 変換対象 String str = "abcABC+-こんにちは"; System.out.println("変換前:" + str); // UTF-16でのURLエンコード String encodeStr = encodStr = URLEncoder.encode(str, "utf-16"); System.out.println("UTF-16 :" + encodeStr); } } |
出力結果
変換前:abcABC+-こんにちは
UTF-16 :abcABC%FE%FF%00%2B-%FE%FF%30%53%30%93%30%6B%30%61%30%6F
encodeメソッドによって文字列がuft-16でエンコードされています。
文字列をWindows-31JでURLエンコードする場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 文字列をURLエンコードするクラス import java.net.URLEncoder; public class Main { public static void main(String[] args) throws Exception { // 変換対象 String str = "abcABC+-こんにちは"; System.out.println("変換前:" + str); // Windows-31JでのURLエンコード String encodeStr = URLEncoder.encode(str, "Windows-31J"); System.out.println("Windows-31J:" + encodeStr); } } |
出力結果
変換前:abcABC+-こんにちは
Windows-31J:abcABC%2B-%82%B1%82%F1%82%C9%82%BF%82%CD
encodeメソッドによって文字列がWindows-31Jでエンコードされています。
文字コードを指定せずに文字列をURLエンコードする場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 文字列をURLエンコードするクラス import java.net.URLEncoder; public class Main { public static void main(String[] args) throws Exception { // 変換対象 String str = "abcABC+-こんにちは"; System.out.println("変換前:" + str); // 文字コードを指定せずにURLエンコード String encodeStr = URLEncoder.encode(str); System.out.println("文字コードを指定なし:" + encodeStr); } } |
出力結果
変換前:abcABC+-こんにちは
文字コードを指定なし:abcABC%2B-%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF
文字コードを指定しない場合は文字列はuft-8でエンコードされます。
今回のポイント
encodeで文字列をURLエンコード
文字列をURLエンコードするにはURLEncoder.encodeメソッドを使用する
⚫︎ URLエンコードとはURLで使えない文字を使うために行う変換方法である
⚫︎ URLEncoder.encodeメソッドでURLで文字列をURLエンコードする
⚫︎ encodeメソッドの第一パラメータは文字列を、第二パラメータは文字コードを指定する
⚫︎ URLで使える文字(アルファベットなど)はそのままで、それ以外の文字のみを変換する
⚫︎ 文字コードを指定しない場合はuft-8で変換される
関連記事
文字列をURLデコードする方法についてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。