2011年8月15日月曜日

Androidアプリ開発日記(2011/08/14)

今日はAndroidだけでなくJavaに関する話題.
JavaがStringをどう扱っているかということを考える必要がある.
Base64エンコードを行うとき,2バイト文字を入れると文字コードによってコンバート結果が異なる.

Javaではファイルを読み込むときに文字コードを指定することができる.
しかしそれはファイルを読み込む時点でそのファイルの文字コードを指定しているだけで,指定した文字コードで文字列を保持するわけではないようだ.
では読み込まれた文字列の文字コードはどうなっているのか.

結論だけ見ると,どうやらJavaが起動しているOSが使用している文字コードになるみたい.
その証拠にwindowsでエンコードするとShift-JISでエンコードされたものとなり,AndroidでエンコードするとUTF-8でエンコードされたものとなる.(Android OSの文字コードがutf-8であることより)

つまり,OSによって採用している文字コードは異なるので,何も考えずStringをBase64エンコードするとそれぞれ異なる結果が得られてしまう.それの吸収は次のようにすることである.(両者ともutf-8で統一するとする)

まずはwondowsでのやりかた
String str = ・・・
String encrypted = new BASE64Encoder().encodeBuffer(str.getBytes("utf-8"));

次にandroidでのやりかた
String str = ・・・
String encrypted = new String(Base64.encode(str.getBytes("utf-8")));
ようは変換したい文字列をエンコードするときに指定したい文字コードでbyte列を作ることによって同一の結果を得ることができるようになる.
デコードも同じようにすることで同じデコード結果を得ることができるよー.

ラベル: ,

0 件のコメント:

コメントを投稿

登録 コメントの投稿 [Atom]

<< ホーム