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]
<< ホーム