1. 程式人生 > >java寫入CSV檔案後Excel開啟亂碼的問題

java寫入CSV檔案後Excel開啟亂碼的問題

使用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 來解決。