文字列をURLエンコード・デコードする方法

Scala 3 (Dotty 0.26.0-RC1) 2.13.3 2.12.12
最終更新:2020年7月6日

[AD] scalapediaでは記事作成ボランティアを募集しています

この記事では、文字列をURLへエンコードしたり、URLから文字列へデコードしたりする方法を解説します。

文字列をURLへエンコードするには「URLEncoder

java.net.URLEncoderを使うと、文字列をURLへエンコードすることができます。

val title = "Scala逆引き解説|Scalapedia" val charset = StandardCharsets.UTF_8.name val result = URLEncoder.encode(title, charset) println(result)

変換するにあたり、第2引数に文字コードを指定する必要があります。

ここではUTF-8を指定します。
文字コードはjava.nio.charset.StandardCharsetsにまとめられているものを参照して使用します。

決して文字列で直接"UTF-8"のように指定したりしないようにしましょう。
いささか面倒ではあるものの、横着すると不具合の温床となります。

実行すると以下のような結果が出力されます。

Scala%E9%80%86%E5%BC%95%E3%81%8D%E8%A7%A3%E8%AA%AC%EF%BD%9CScalapedia

文字列がURLエンコードされていることがわかります。

URLを文字列へデコードするには「URLDecoder

逆に、java.net.URLDecoderを使うと、URLの文字列をデコードすることができます。

こちらも変換するにあたり、第2引数に文字コードを指定する必要があります。
UTF-8を指定して実行します。

val str = "Scala%E9%80%86%E5%BC%95%E3%81%8D%E8%A7%A3%E8%AA%AC%EF%BD%9CScalapedia" val charset = StandardCharsets.UTF_8.name val result = URLDecoder.decode(str, charset) println(result)

結果は以下のようになります。

Scala逆引き解説|Scalapedia

第2引数の文字コードは必ず渡しましょう

第2引数の文字コードを省略したメソッドが存在しています。
一見便利なのですが、既に非推奨となっています。

環境によって文字コードが異なりうるので、予期せぬ不具合が生じる可能性があるためです。

たとえさまざまな環境で実行する予定がなくとも、念のため使用は避けておきましょう。

サイト内検索


カテゴリ「文字列処理」の記事

文字列をエスケープしたり復元したりする方法(Apache Commons Text) JavaとScalaのString/StringBuilder/StringBuffer使い分け事情 文字列を分割する方法(split・splitAt・linesIterator・linesWithSeparatorsメソッド) trimメソッドで文字列の前後の空白を除去する 文字列が一致するか比較する方法/大文字・小文字を区別せずに比較する方法 特定の文字の文字コード(コード・ポイント)を取得する replaceメソッドなど、文字列を置換する方法を紹介 文字列の先頭や末尾を、取得したり切り落としたりする方法 containsメソッドでStringに特定の文字列が含まれるか調べる方法 数値を文字列に変換する方法 stripメソッドで文字列の前後の全角空白を除去する 文字列を数値に変換するには?to○○メソッドと注意点について 文字列を辞書的に比較する方法/大文字・小文字を区別せずに比較する方法 文字列が特定の文字列で始まるか・終わるかを調べる方法 【getBytes&size】文字列のバイト長を取得する方法 substringでStringを切り取り、部分文字列を抽出する方法 StringOpsとWrappedStringの違いは? 文字列を連結するには?+演算子やString interpolationの使い方 文字列の大文字へ・小文字へ変換する方法 文字列を逆順にする方法 文字列の文字コード(文字セット)を変換する方法 文字列の長さを取得する方法:lengthとcodePointCountの使い分け 文字列をURLエンコード・デコードする方法 文字列が正規表現に合致するか調べる方法 この文字の位置はどこ?文字列のインデックスを取得する方法 文字列をバイト列に、またはバイト列を文字列に変換する方法

カテゴリ「文字列処理」の記事

文字列をエスケープしたり復元したりする方法(Apache Commons Text) JavaとScalaのString/StringBuilder/StringBuffer使い分け事情 文字列を分割する方法(split・splitAt・linesIterator・linesWithSeparatorsメソッド) trimメソッドで文字列の前後の空白を除去する 文字列が一致するか比較する方法/大文字・小文字を区別せずに比較する方法 特定の文字の文字コード(コード・ポイント)を取得する replaceメソッドなど、文字列を置換する方法を紹介 文字列の先頭や末尾を、取得したり切り落としたりする方法 containsメソッドでStringに特定の文字列が含まれるか調べる方法 数値を文字列に変換する方法 stripメソッドで文字列の前後の全角空白を除去する 文字列を数値に変換するには?to○○メソッドと注意点について 文字列を辞書的に比較する方法/大文字・小文字を区別せずに比較する方法 文字列が特定の文字列で始まるか・終わるかを調べる方法 【getBytes&size】文字列のバイト長を取得する方法 substringでStringを切り取り、部分文字列を抽出する方法 StringOpsとWrappedStringの違いは? 文字列を連結するには?+演算子やString interpolationの使い方 文字列の大文字へ・小文字へ変換する方法 文字列を逆順にする方法 文字列の文字コード(文字セット)を変換する方法 文字列の長さを取得する方法:lengthとcodePointCountの使い分け 文字列をURLエンコード・デコードする方法 文字列が正規表現に合致するか調べる方法 この文字の位置はどこ?文字列のインデックスを取得する方法 文字列をバイト列に、またはバイト列を文字列に変換する方法