shokosブログ

プログラミング

文字化けについてすっきり

すっきりしました!

英→日に翻訳するアプリケーションの文字化けの問題


手を加えたところ
Before

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));


After

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));

googelに接続して受け取った入力ストリームを文字として読み込んでいる部分です。

InputStreamReaderはバイトを文字に変換します。変換の際、文字コードは指定しなければプラットフォームのデフォルトのものをそのまま使います。

googleから返ってきたレスポンスの文字セットはutf-8
でもWindowsのデフォルトの文字コードShift_JIS

文字化けの原因はここにあったみたい


ではなんでJunitのテストではうまくいっていたのかというと、
eclipse文字コードutf-8になるように設定していたからなんですね




2個前の記事のはてなの投稿の文字化け解決も同じロジックで、
PrintStreamは文字コードを指定しないとプラットフォームのデフォルトの文字コードを使ってバイトに変換してしまいます。

ここも最初文字コードを指定していなくて、文字化けが起きてしまっていました。



うーん

windowsの文字コードutf-8に変えられないのかな
って思ったけど、それはできないらしいです