【Java】decodeで文字列をURLデコードする!
文字列をURLデコードするにはURLDecorderクラスのdecodeメソッドを使用します。
decodeメソッドは指定した文字列をURLデコードするメソッドとであり、URLデコードすることでURLエンコードされた文字列を元の形式に戻すことができます。
また、decodeメソッドでデフォルトの場合はuft-8でURLデコードされますが、文字コードを指定することで文字コードを設定してURLデコードができます。
今回はURLDcorderクラスのdecodeメソッドを使って以下の場合で文字列をURLデコードしていきます。
⚫︎ 文字列をuft-8でURLデコードする場合
⚫︎ 文字列をuft-16でURLデコードする場合
⚫︎ 文字列をWindows-31JでURLデコードする場合
⚫︎ 文字コードを指定せずに文字列をURLデコードする場合
⚫︎ URLデコードで変換するパターンがない場合
目次
デコードとは
デコードとはエンコードの逆であり、もう少し丁寧に書くとエンコードされたデータを元の形式へ戻すことです。
エンコードの意味は「データを他の形式へ変換すること」ですが、デコードすることでデータを他の形式へ変換されたデータを元の状態に戻すことができます。
また、URLにはアルファベットとなっていますが日本語を入力した場合、対応したアルファベットの組み合わせに置き換えるのをURLエンコードと言いますが、これを「URLに使える文字の組み合わせ」から「URLで使えない文字」に戻すことをURLデコードといいます。
decodeメソッドとは
URLDecorderクラスのdecodeメソッドとは文字列をURLデコードするメソッドとなります。
decodeメソッドの書き方
decodeメソッドの構文は下記となります。
1 |
URLEncorder.decode(文字列, [文字コード]) |
パラメータ
⚫︎ 文字列:
デコードしたい文字列を指定します
⚫︎ 文字コード(任意):
デコードする際の文字コードを指定します(uft-8やuft-16など)
decodeメソッドの第一パラメータに文字列, 第二パラメータに文字符号化方式を指定することで()に指定した文字列をURLデコードします。
第二パラメータを指定せずにdecodeメソッドを呼び出した場合は、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.URLDecoder; public class Main { public static void main(String[] args) throws Exception { // 変換対象 String str = "abcABC%2B-%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF"; System.out.println("変換前:" + str); // UTF-8でのURLデコード String decodeStr = URLDecoder.decode(str, "utf-8"); System.out.println("UTF-8 :" + decodeStr); } } |
出力結果
変換前:abcABC%2B-%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF
UTF-8 :abcABC+-こんにちは
decodeメソッドによって文字列がuft-8でデコードされています。
文字列をuft-16でURLデコードする場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 文字列をURLデコードするクラス import java.net.URLDecoder; public class Main { public static void main(String[] args) throws Exception { // 変換対象 String str = "abcABC%FE%FF%00%2B-%FE%FF%30%53%30%93%30%6B%30%61%30%6F"; System.out.println("変換前:" + str); // UTF-16でのURLデコード String decodeStr = URLDecoder.decode(str, "utf-16"); System.out.println("UTF-16 :" + decodeStr); } } |
出力結果
変換前:abcABC%FE%FF%00%2B-%FE%FF%30%53%30%93%30%6B%30%61%30%6F
UTF-16 :abcABC+-こんにちは
decodeメソッドによって文字列が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.URLDecoder; public class Main { public static void main(String[] args) throws Exception { // 変換対象 String str = "abcABC%2B-%82%B1%82%F1%82%C9%82%BF%82%CD"; System.out.println("変換前:" + str); // Windows-31JでのURLデコード String decodeStr = URLDecoder.decode(str, "Windows-31J"); System.out.println("Windows-31J:" + decodeStr); } } |
出力結果
変換前:abcABC%2B-%82%B1%82%F1%82%C9%82%BF%82%CD
Windows-31J:abcABC+-こんにちは
decodeメソッドによって文字列がWindows-31Jでデコードされています。
文字コードを指定せずに文字列をURLデコードする場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 文字列をURLデコードするクラス import java.net.URLDecoder; public class Main { public static void main(String[] args) throws Exception { // 変換対象 String str = "abcABC%2B-%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF"; System.out.println("変換前:" + str); // 文字コードを指定せずにURLデコード String decodeStr = URLDecoder.decode(str); System.out.println("文字コードを指定なし:" + decodeStr); } } |
出力結果
変換前:abcABC%2B-%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF
文字コードを指定なし:abcABC+-こんにちは
文字コードを指定しない場合は文字列はuft-8でデコードされます。
URLデコードで変換するパターンがない場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 文字列をURLデコードするクラス import java.net.URLDecoder; public class Main { public static void main(String[] args) throws Exception { // 変換対象 String str = "abcABC%FE%FF5g%61%30%6h"; System.out.println("変換前:" + str); // UTF-16でのURLデコード String decodeStr = URLDecoder.decode(str, "utf-8"); System.out.println("UTF-8 :" + decodeStr); } } |
出力結果
Exception in thread “main” java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern – Error at index 1 in: “6h”
デコードするパターンがない為、エラーが発生しています。
今回のポイント
decodeで文字列をURLデコード
文字列をURLデコードするにはURLDecoder.decodeメソッドを使用する
⚫︎ デコードとはエンコードされたデータを元の形式へ戻すことである
⚫︎ URLDecoder.decodeメソッドでURLで文字列をURLデコードする
⚫︎ decodeメソッドの第一パラメータは文字列を、第二パラメータは文字コードを指定する
⚫︎ 文字コードを指定しない場合はuft-8で変換される
⚫︎ 文字列にURLデコードで変換するパターンがない場合はエラーが発生する
関連記事
文字列をURLエンコードする方法についてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。