言語や実装によって変換される文字種がとってもファジーな感じです。
そのため対向システムとのやり取りの障害となることが頻繁に発生します。
例によって今回も発生したので対応方法をメモっておきたいと思います。
使用言語はJavaです。
この場合の対応方法は基本的に変換する文字種を指定してURLエンコードを行うことです。
URLエンコードの処理はそれほど難しくもないので
自分で全部書いてしまってもいいと言えばいいのですが
車輪の再発明を何度もするのもアレなので既存のライブラリ(Apache Commons Codec)を使用する方法です。
1 | public String myUrlEncode(String source) |
---|---|
2 | { |
3 | StringBuilder sb = new StringBuilder(); |
4 | |
5 | // URLで安全な(変換しない)値を指定する |
6 | // 以下は英数字のみの指定 |
7 | BitSet urlSafe = new BitSet(); |
8 | urlSafe.set(0x30, 0x3a); |
9 | urlSafe.set(0x41, 0x05b); |
10 | urlSafe.set(0x61, 0x07b); |
11 | |
12 | // URLCodec.encodeUrlを上記の設定を使って実行する |
13 | // 返される値は変換済み文字列のASCIIコード |
14 | for (byte b : URLCodec.encodeUrl(urlSafe, source.getBytes(StandardCharsets.UTF_8))) |
15 | sb.appendCodePoint(b); |
16 | |
17 | return sb.toString(); |
18 | } |