前提・実現したいこと
UTF8等の文字コードで作成されているCSVファイルを読み込んで
そのファイルをSJISに変換して出力したいです。
単に変換するだけではなく、変換前と変換後では
文字コード以外は同じ内容にする必要があります。
(例)UTF8で書かれた「あ」をSJISの「あ」にする。
発生している問題・エラーメッセージ
変換すると文字化けしてしまいます。
(例)
下記の3行はUTF8で書かれています。
"氏名","電話"
"髙橋","09011112222"
"鷗外","090-1111-2222"
これらをSJISに変換すると
?サソ"豌丞錐"
"髮サ隧ア"
"鬮呎ゥ?"
"09011112222"
"鮃怜、?"
"090-1111-2222"
となってしまいます。
該当のソースコード
Java
1package SWT; 2 3import java.io.BufferedReader; 4import java.io.BufferedWriter; 5import java.io.File; 6import java.io.FileInputStream; 7import java.io.FileOutputStream; 8import java.io.IOException; 9import java.io.InputStreamReader; 10import java.io.OutputStreamWriter; 11import java.io.PrintWriter; 12 13import org.eclipse.swt.SWT; 14import org.eclipse.swt.events.SelectionAdapter; 15import org.eclipse.swt.events.SelectionEvent; 16import org.eclipse.swt.widgets.Button; 17import org.eclipse.swt.widgets.Display; 18import org.eclipse.swt.widgets.Shell; 19 20 21 22 23public class 文字コード変換 { 24 25 public static void main(String[] args) { 26 Display display = new Display(); 27 Shell shell = new Shell(display); 28 shell.setText("実行"); 29 shell.open(); 30 31 Button but = new Button(shell,SWT.PUSH); 32 but.setText("実行"); 33 but.setBounds(450,220,70,20); 34 35 but.addSelectionListener(new SelectionAdapter(){ 36 public void widgetSelected(SelectionEvent e){ 37 try { 38 /* 文字コードUTF-8のファイルを読み込んでShift-JISに変換する */ 39 40 File fileIn = new File("C:\Users\Desktop\java\文字コード\文字コードCSV\UTF8.csv"); 41 42 //文字コードUTF-8を指定してファイルを読み込む 43 FileInputStream input = new FileInputStream(fileIn); 44 InputStreamReader stream = new InputStreamReader(input, "UTF8"); 45 BufferedReader buffer = new BufferedReader(stream); 46 47 //書き込む用のファイルを指定する 48 File fileOut = new File("C:\Users\Desktop\「実行」機能保存先フォルダ\変換後文字コード確認.csv"); 49 PrintWriter p_writer = new PrintWriter 50 (new BufferedWriter(new OutputStreamWriter 51 (new FileOutputStream(fileOut),"SJIS"))); 52 53 String str; 54 55 //ファイルの最終行まで読み込む 56 while((str = buffer.readLine()) != null){ 57 58 byte[] b = str.getBytes(); 59 60 //文字コードをShift-JISに変換する 61 str = new String(b, "SJIS"); 62 63 String[] col = str.split(",", -1); 64 65 for ( int i=0; i<col.length; i++){ 66 System.out.println(col[i]); 67 //ファイルに字列を書き込む 68 p_writer.println(col[i]); 69 } 70 } 71 //ファイルをクローズする 72 p_writer.close(); 73 } 74 catch (IOException ex) { 75 ex.printStackTrace(); 76 } 77 } 78 }); 79 80 while (!shell.isDisposed()){ 81 if (!display.readAndDispatch()){ 82 display.sleep(); 83 } 84 } 85 86 display.dispose(); 87 } 88} 89
試したこと
変換後の文字コードをUTF8にすると
文字化けせずに出力されます。
補足情報(FW/ツールのバージョンなど)
文字コードを取得する方法についても調べていますが
有力な情報を得られていません。
「815C」等の符号を取得する方法は分かりましたが
「UTF8」や「SJIS」といった文字コードを取得する方法が分からないです。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。