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

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

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

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

Java

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

Q&A

解決済

2回答

6376閲覧

Java CSVファイルで文字化けしてしまいます。"UTF-8"で指定していますができません。。。

abe_sinzo

総合スコア12

CSV

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

Java

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

0グッド

1クリップ

投稿2022/06/04 10:57

JavaでCSVファイルに変換する際の文字コードに指定について

JavaでGUIプログラミングをし、作成したウィンドウから入力内容をCSVファイルにするというものです。

プログラム上部はGUIについてです。下の方にActionEventについてコードしているのでそこを見ていただけたらと思います。

java

1 2import java.io.BufferedWriter; 3import java.io.File; 4import java.io.FileOutputStream; 5import java.io.FileWriter; 6import java.io.OutputStreamWriter; 7 8import javafx.application.Application; 9import javafx.event.ActionEvent; 10import javafx.event.EventHandler; 11import javafx.geometry.Insets; 12import javafx.geometry.Pos; 13import javafx.scene.Scene; 14import javafx.scene.control.Button; 15import javafx.scene.control.Label; 16import javafx.scene.control.RadioButton; 17import javafx.scene.control.TextField; 18import javafx.scene.control.ToggleGroup; 19import javafx.scene.layout.BorderPane; 20import javafx.scene.layout.HBox; 21import javafx.scene.layout.VBox; 22import javafx.scene.text.Font; 23import javafx.scene.text.FontWeight; 24import javafx.stage.FileChooser; 25import javafx.stage.Stage; 26 27public class GenerateInfo extends Application{ 28 private Label lb1,lb2,lb3,lb4,lb5,lb6,lb7; 29 private Button[] bt; 30 private TextField tf1,tf2,tf3,tf4,tf5,tf6; 31 private RadioButton[] rb; 32 private ToggleGroup tg; 33 private BorderPane bp; 34 private HBox hb1,hb2,hb3,hb4,hb5,hb6,hb7; 35 private VBox vb; 36 37 public static void main(String[] args) { 38 launch(args); 39 } 40 public void start(Stage stage)throws Exception{ 41 //Title 42 lb1=new Label("Fill in Information"); 43 lb1.setFont(Font.font("Century",FontWeight.BOLD,24)); 44 45 //Name 46 lb2=new Label("Name:"); 47 tf1=new TextField(); 48 hb1=new HBox(); 49 hb1.getChildren().addAll(lb2,tf1); 50 hb1.setPadding(new Insets(0,0,5,0)); 51 hb1.setAlignment(Pos.CENTER_RIGHT); 52 53 //Email 54 lb3=new Label("Email:"); 55 tf2=new TextField(); 56 hb2=new HBox(); 57 hb2.getChildren().addAll(lb3,tf2); 58 hb2.setPadding(new Insets(0,0,5,0)); 59 hb2.setAlignment(Pos.CENTER_RIGHT); 60 61 //RadioButton 62 rb=new RadioButton[2]; 63 rb[0]=new RadioButton("Male"); 64 rb[1]=new RadioButton("Female"); 65 tg=new ToggleGroup(); 66 for(int i=0;i<rb.length;i++) { 67 rb[i].setToggleGroup(tg); 68 //rb[i].setOnAction(new Event()); 69 } 70 hb3=new HBox(); 71 hb3.getChildren().addAll(rb[0],rb[1]); 72 hb3.setPadding(new Insets(0,0,5,60)); 73 hb3.setAlignment(Pos.CENTER); 74 hb3.setSpacing(30); 75 76 //Address 77 lb4=new Label("Address:"); 78 tf3=new TextField(); 79 hb4=new HBox(); 80 hb4.getChildren().addAll(lb4,tf3); 81 hb4.setPadding(new Insets(0,0,5,0)); 82 hb4.setAlignment(Pos.CENTER_RIGHT); 83 84 //Organization 85 lb5=new Label("Organization:"); 86 tf4=new TextField(); 87 hb5=new HBox(); 88 hb5.getChildren().addAll(lb5,tf4); 89 hb5.setPadding(new Insets(0,0,5,0)); 90 hb5.setAlignment(Pos.CENTER_RIGHT); 91 92 //Student ID & Age 93 lb6=new Label("Student ID:"); 94 lb7=new Label("Age:"); 95 tf5=new TextField(); 96 tf6=new TextField(); 97 tf5.setMaxWidth(100); 98 tf6.setMaxWidth(30); 99 hb6=new HBox(); 100 hb6.getChildren().addAll(lb6,tf5,lb7,tf6); 101 hb6.setPadding(new Insets(0,0,5,0)); 102 hb6.setAlignment(Pos.CENTER_RIGHT); 103 104 //Button 105 bt=new Button[2]; 106 bt[0]=new Button("Clear"); 107 bt[1]=new Button("Generate"); 108 hb7=new HBox(); 109 for(int i=0;i<bt.length;i++) { 110 hb7.getChildren().add(bt[i]); 111 bt[i].setOnAction(new ButtonEventHandler()); 112 } 113 hb7.setAlignment(Pos.CENTER); 114 hb7.setPadding(new Insets(0,0,5,30)); 115 hb7.setSpacing(30); 116 117 118 //GUI Display 119 bp=new BorderPane(); 120 vb=new VBox(); 121 vb.setPadding(new Insets(0,60,0,0)); 122 vb.getChildren().addAll(hb1,hb2,hb3,hb4,hb5,hb6,hb7); 123 bp.setTop(lb1); 124 bp.setCenter(vb); 125 126 bp.setAlignment(lb1, Pos.CENTER); 127 bp.setAlignment(vb, Pos.CENTER_RIGHT); 128 129 Scene sc=new Scene(bp,350,300); 130 stage.setScene(sc); 131 stage.setTitle("generateInfo"); 132 stage.show(); 133 134 } 135 class ButtonEventHandler implements EventHandler<ActionEvent>{ 136 public void handle(ActionEvent e) { 137 if(e.getSource().equals(bt[0])) { 138 //clear 139 tf1.setText(""); 140 tf2.setText(""); 141 tf3.setText(""); 142 tf4.setText(""); 143 tf5.setText(""); 144 tf6.setText(""); 145 } 146 if(e.getSource().equals(bt[1])) { 147 //generate 148 FileChooser fc=new FileChooser(); 149 fc.setInitialDirectory(new File("./MyfileEx")); 150 FileChooser.ExtensionFilter extensionFilter= 151 new FileChooser.ExtensionFilter("csv file", "*.csv"); 152 fc.getExtensionFilters().add(extensionFilter); 153 File flw=fc.showSaveDialog(new Stage()); 154 try { 155 BufferedWriter bw=new BufferedWriter(new FileWriter(flw)); 156 FileOutputStream out=new FileOutputStream(flw);番号リスト 157 OutputStreamWriter osw=new OutputStreamWriter(out,"UTF-8"); 158 bw=new BufferedWriter(osw); 159 //ヘッダ 160 bw.append("Name,Email,Gender,Address,Organization,Student ID,Age"); 161 bw.newLine(); 162 //書き出し 163 String info=""; 164 info=info+tf1.getText()+",";//名前 165 info=info+tf2.getText()+",";//Email 166 if(rb[0].isSelected()) {//性別 167 info+="Male,"; 168 }else { 169 info+="Female,"; 170 } 171 info=info+tf3.getText()+",";//住所 172 info=info+tf4.getText()+",";//所属 173 info=info+tf5.getText()+",";//学籍番号 174 info=info+tf6.getText();//年齢 175 System.out.println(info); 176 bw.append(info); 177 bw.close(); 178 }catch(Exception ex) { 179 ex.printStackTrace(); 180 } 181 } 182 } 183 } 184}

実行し入力内容をもとにCSVファイルを出力します。

イメージ説明

そしてCSVファイルを開きますが、
イメージ説明

このように文字化けしてしまっています。

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

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

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

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

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

jimbe

2022/06/04 12:15

csv を開いたアプリが excel でしたら、 excel 側で "utf-8 の csv" としてファイルを開く操作をしては如何でしょうか。
abe_sinzo

2022/06/04 13:08

ベストアンサーにした方の通りですが、プログラムの問題ではなく、「少なくともWindows版のExcelでは、CSVを開く際に原則Shift-JISを用いるようです。」とのことでした。 Excel内でcsvファイルをutf-8で開くも確認しました。自分の入力した内容が正しくCSVファイルに書き込まれていました。ご回答ありがとうございました。
guest

回答2

0

ベストアンサー

上の方にもあるように、ExcelのCSVファイルの扱いは少し特殊な点があります。 

ExcelでのCSVファイルの扱い

少なくともWindows版のExcelでは、CSVを開く際に原則Shift-JISを用いるようです。ただし、UTF-8のBOM(バイトオーダーマーク)がある場合に限りUTF-8としてファイルを扱っているようです。

対処法

「Excelでなければならない」といった切実な事情がなければ、適当なエディタなどでファイルを開けば問題ないはずです。
もしくは、エンコーディングの指定(OutputStreamWriterのある行)の UTF-8SJIS などにしてあげることで、Excelでも文字化けすることなくファイルが読み込めるのではないでしょうか。

投稿2022/06/04 12:45

ryy

総合スコア22

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

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

0

そのCSVファイルをテキストエディタ(Windowsならメモ帳)で開いて、文字コードを確認しよう

投稿2022/06/04 11:07

y_waiwai

総合スコア88000

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.38%

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

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

質問する

関連した質問