無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

文字列を%形式にエスケープする。

文字列を「%<16進数>」形式にエスケープする関数を書きました。「%<16進数>」形式はURLエンコードで使われるエスケープの方式です。URLエンコードではaとかbとかURLで使える文字列をエスケープする必要はありませんが、この関数はすべての文字列を容赦なくエスケープします。

/**
 * 「%16進数」形式にエスケープする。
 * @param string エスケープする文字列
 * @param encode 文字列のエンコード
 * @return エスケープした文字列
 * @throws UnsupportedEncodingException 文字列のエンコードが不正な場合
 */
public static final String escape( String string, String encode )
throws UnsupportedEncodingException {
    StringBuffer buff = new StringBuffer();
    byte[] b = string.getBytes( encode );
    for ( int i = 0; i < b.length; i++ ) {
        buff.append( "%").append( String.format("%1$02X", b[i]) );
    }
    return buff.toString();
}

サンプル。

System.out.println( "a  : " + escape( "a",  "UTF-8" ) );
System.out.println( "あ : " + escape( "あ", "UTF-8" ) );
System.out.println( "あ : " + escape( "あ", "SJIS" ) );
System.out.println( "#  : " + escape( "#",  "UTF-8" ) );
System.out.println( "   : " + escape( " ",  "UTF-8" ) );
System.out.println( "\\t : " + escape( "\t",  "UTF-8" ) );


実行結果です。

a  : %61
あ : %E3%81%82
あ : %82%A0
#  : %23
   : %20
\t : %09

修正 (2008-01-09)

bleis-tift さんからトラックバックでつっこんで頂いた点を修正(とりあえず明らかなバグだけ)

  • "\t"を変換すると、"%9"とかになる。
    • →1桁になる場合を考慮してなかった・・・。orz. 愚かすぎる。ということでフォーマットを"%1$02X"に修正。

他にもいろいろご指摘いただきました。参考になります。ありがとうございました。