ヒマをみつけてWeb開発
その場の思い付きを、ヒマをみつけてWebサイトにしてみるブログ

Propertiesクラスでnative2asciiを実装

Monday, 20 November 2006 00:00 by sabro

Javaでnative2asciiを実装の件ですが、Propertiesクラスを使って実装してみることにしました。

もともとnative2asciiは、Propertyファイルに日本語文字列を格納するためのツールであり、PropertiesクラスはそのPropertyファイルを読み込んだり書き込んだりするわけで、なにかしらの変換手段を持っているはずだからです。

JavaDocを見ると、どうやらgetProperty、setPropertyメソッドを使っているだけではUnicode変換は発生しないようです。storeメソッドでStreamに書き出したり、loadメソッドで読み出したりする際に変換が発生するとのこと。

実際にstoreメソッドで「あいうえお」と保存したとき、以下のように保存されていました。=以下の部分が変換後の文字列です。うまくこの部分を取得できれば変換が出来そうです。

##Sun Nov 19 22:55:25 JST 2006=\u3042\u3044\u3046\u3048\u304A

さらに今回はメモリ内で処理を完結させたいので、StreamにはByteArrayOutputStream、ByteArrayInputStreamを使います。以下ソースです。

Properties p=new Properties();
ByteArrayOutputStream bos=new ByteArrayOutputStream();
p.setProperty("", "変換文字列");p.store(bos, "");
int index=bos.toString().indexOf("=");
return bos.toString().substring(index+1).replaceAll("\\=", "=").replaceAll("\\:",":").replaceAll("\\#", "#").replaceAll("\\!","!").replaceAll("\\\\","\\");

変換する文字列をsetPropertyで格納し、storeメソッドでその内容をByteArrayOutputStreamに保存します。そして=以下の部分をsubstringで取得します。「#、!」はコメントに使われる文字なのでエスケープされています。最後の行でこれをエスケープされてない状態に戻しています。同様にkeyとvalueの区切りに使われる「=、:」、Unicode文字の先頭に使われる「\」もアンエスケープしています。

デコードのソースは以下です。

Properties p=new Properties();
ByteArrayInputStream bis=new ByteArrayInputStream("=".concat("変換文字列").getBytes());
p.load(bis);
return p.getProperty("");

文字列の前に=を連結してByteArrayInputStreamに保存した後、空文字をkeyとしてgetPropertyで取得するとデコードされます。

これで何とかnative2asciiは実装できそうです。ついでにURLエンコードとかも出来るようにしようかと考え中です。

Tags:  
Categories:   Java
Actions:   Permalink | Comments (0) | Comment RSSRSS comment feed

Add comment




biuquote
  • Comment
  • Preview
Loading