投稿日:
【Java】エクセルでCSVを開いた際に日本語が文字化けする原因と解決方法【BOM付きUTF-8】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
目次
CSVの日本語がエクセルで文字化けする!
日本語が見れない
JavaでBufferedWriter
クラス等を用いてCSVファイルを生成する際、日本語が混じっているとソースコード上でUTF-8
の指定をしていたとしてもエクセルで開くと文字化けしてしまうことがあります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
...略...
try {
PrintWriter p =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("export.csv"), "UTF-8")));
// 1行目
p.print("test");
p.print(",");
p.print("テスト");
p.println();
// 2行目
p.print("サンプル");
p.print(",");
p.print("sample");
// ファイルに書き出し閉じる
p.close();
...略...
|
ちなみにMacのプレビューなどでは正常に表示されます。
原因はBOMが無いから
結論から言うと、原因としてはCSVファイルにBOMの指定が無いからです!
BOMとは、Byte Order Markの略となっていて、Microsoft ExcelはこのBOMがあるファイルのみUTF-8として解釈し、それ以外はデフォルトでSJISとして読み取ってしまうため、文字化けしてしまうようです。
それでは原因が分かったところで実際にソースコードに手を加えて解決していきましょう!
¥
手順
FileOutputStreamにBOMを付与
対応方法はとても簡単で、以下のようにFileOutputStream
を一旦変数に代入し、行を記入する前にBOMの指定をするだけでOKです♪
1
2
3
4
5
6
7
8
9
10
11
12
13
|
...略...
try {
FileOutputStream fos = new FileOutputStream("export.csv"); // 変数に代入
PrintWriter p = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(fos, "UTF-8")));
// BOM付与
fos.write(0xef);
fos.write(0xbb);
fos.write(0xbf);
// 1行目
...略...
|
確認
それでは出力したCSVファイルをエクセルで開いてみましょう!
無事に文字化けしなくなりましたね♪
終わりに
以上のように業務システムを作る際にはCSV出力機能を実装する事は多いと思いますが、知っていないと意外とハマるポイントです。
CSVファイルの文字化けにお悩みの方は是非試してみてください♪