• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Windows-31Jからutf-8への変換が分かりません><)

Windows-31Jからutf-8への変換方法を教えてください

このQ&Aのポイント
  • Windows-31Jからutf-8への変換方法が分からない
  • JPAを使用してWindows-31Jで書かれたCSVファイルのデータをutf-8でMySQLにINSERTしようとしているが、文字化けしてしまう
  • 取り込む部分でgetBytes("Windows-31J")と"utf-8"を使って変換してもうまくいかない

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

> new String( nextLine[0].getBytes("Windows-31J"), "utf-8" ) これは - nextLine[0]というStringに入っている文字列をWindows-31Jのbyte配列に変換する - そのbyte配列がUTF-8のデータだと見なしてStringに変換する という意味になります。Windows-31JのデータをUTF-8のデータだと思って処理したら化けるのは当然です。 そうではなくて、 - CSVファイルから読み込んでStringにするときにWindows-31Jであることを指定する - Stringの内容をデータベースに書き出すときにUTF-8であることを指定する という手順を踏む必要があります。 ファイルから読むのにCSVReaderというのを使っているようですが、そのコンストラクタにjava.io.Readerのオブジェクトを指定しますよね。そのとき、"Windows-31J"を指定したjava.io.InputStreamReaderを渡すようにすれば読み込みの文字コード指定はできます。 JPAでデータベースを読み書きする場合の文字コード指定の方法は知らないので答えられません。

micchicchi
質問者

お礼

salsberryさん、レスどうもです!! >Windows-31JのデータをUTF-8のデータだと思って処理したら化けるのは当然です。 この説明すごく分かりやすかったです。 で、次の、 >- CSVファイルから読み込んでStringにするときにWindows-31Jであることを指定する >- Stringの内容をデータベースに書き出すときにUTF-8であることを指定する が大変ヒントになりました^^v えーと、このメソッド呼ぶ前に、 CSVReader reader = new CSVReader( new InputStreamReader( part.getInputStream(), "Windows-31J" ) ); こんな感じでやってたので、 RepTest rep = new RepTest(); rep.setRepId( nextLine[0] ); rep.setRepNameKana( nextLine[1] ); rep.setRepName( nextLine[2] ); まずは、こんな感じに、getBytes外しました。 で、DBに書く方は、 jdbc:mysql://localhost:3306/hogehoge?useUnicode=true&characterEncoding=UTF-8 ってPoolの設定したら出来ました~^^v やった~! 大大感謝ですm(__)m

関連するQ&A