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エミュをはじめ大抵の端末だと動いてしまうのがややこしい)