java寫入CSV檔案後Excel開啟亂碼的問題
阿新 • • 發佈:2019-01-28
使用java寫入csv檔案,並且檔案編碼也設成了“UTF-8”:
File file = new File("a.csv");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.write("這是中文");
bw.flush();
bw.close();
osw.close();
生成csv檔案後,開啟的預設方式是excel,但是用excel開啟後發現裡面的中文全都是亂碼。(需要注意的是,如果用txt文字文件開啟,就不是亂碼,顯示正常。)
網上找了一個解決辦法,讓把檔案編碼換成gbk就行了。
OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream(file), "gbk" );
但是這樣治標不治本,我就需要UTF-8呢,而且正常情況下也應該用UTF-8呀。
於是我找到了一個最好的解決辦法。可以通過在csv的檔案頭設定BOM(Byte order mark)來解決。
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); out.write('\ufeff'); out.write("需要寫入的檔案內容");
上面程式碼的核心就是 out.write('\ufeff');
,通過寫入BOM \ufeff
來解決。