• Javaで文字種を指定してURLエンコード

    2014年02月20日 18時45分
    URLエンコードと言えばRFC 3986みたいな仕様が有るものの
    言語や実装によって変換される文字種がとってもファジーな感じです。

    そのため対向システムとのやり取りの障害となることが頻繁に発生します。

    例によって今回も発生したので対応方法をメモっておきたいと思います。
    使用言語はJavaです。


    この場合の対応方法は基本的に変換する文字種を指定してURLエンコードを行うことです。

    URLエンコードの処理はそれほど難しくもないので
    自分で全部書いてしまってもいいと言えばいいのですが
    車輪の再発明を何度もするのもアレなので既存のライブラリ(Apache Commons Codec)を使用する方法です。

    1public 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}

    コメントを書く

    名前
    本文
    編集用パスワード
    管理者のみ閲覧