質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

4002閲覧

文字コードを変換してCSVファイルを出力したいのですが文字コードの変換がうまくできません。

moomin_y

総合スコア15

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2018/10/10 01:58

編集2018/10/10 02:00

前提・実現したいこと

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」といった文字コードを取得する方法が分からないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

文字コードを取得する方法

ここでも何度か質問に上がっていたと思いますが、決定打はありません。
Unicodeについては、BOMがあれば、判定可能ですが、それ以外は、バイト列を見て、どのコードの可能性が高いかの判定しかありません。

市販ソフト(ツール)も同様で、誤判定もそこそこ。ただ、日本語の一般文書と範囲を限定すれば、そこそこの判定は可能と思います。(文字コード特有の癖を見る)

文字化けについては、 dice142さんの書かれたように出力時の問題と思います。

投稿2018/10/10 13:59

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ご提示いただいたコードの文字変換部だけ試しましたが、問題なく変換されていました。
出力先のコンソール等がUTF-8の設定になっているのではないですか?

投稿2018/10/10 02:17

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moomin_y

2018/10/10 02:30

dice142様 ご回答ありがとうございます。 出力したcsvファイルをエクセルの「外部データの取り込み」から 読み込みましたが、例で示したような文字化けが発生しました。 読み込んだ際、文字コードをUTF8にすると 一部の文字化けは解消しました。
dice142

2018/10/10 05:56

「外部データの取り込み」で文字コードを「Shift-JIS」にしても文字化けが起きたということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問