URLエンコード文字列の取得方法に注意

Androidにて、文字列のURLエンコード時に一部端末でのみクラッシュする現象が発生。ログは以下。

java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]
at java.nio.charset.Charset.checkCharsetName(Charset.java:201)
at java.nio.charset.Charset.forName(Charset.java:295)
at java.net.URLEncoder.encode(URLEncoder.java:57)

“UTF-8″と指定しているハズのエンコード名文字列がおかしいぞ的なやつ。
該当箇所のコード洗って原因判明。文字コードの文字列定義の参照の仕方が間違ってた。

- URLEncoder.encode(query, java.nio.charset.StandardCharsets.UTF_8.toString())
+ URLEncoder.encode(query, java.nio.charset.StandardCharsets.UTF_8.name())

StandardCharsets.UTF_8.toString()だと端末によって”UTF-8″文字列が取得できないっぽい。
StandardCharsets.UTF_8.name()を指定するのが正しい。
間違って指定しているサイトが間々あるので注意
(Androidエミュをはじめ大抵の端末だと動いてしまうのがややこしい)

スポンサーリンク