2019年2月27日 星期三

[Java] 解決匯出CSV檔的中文問題

BOM (Byte Order Mark) 是用於表示文件採用何種編碼模式,一般藏於文件開頭的前幾碼,目的是讓不同的編輯器知道要採用何種方式進行打開。

在Windows下,若要以UTF-8來儲存,則必須在文件的最開頭寫入 {0xEF, 0xBB, 0xBF},此三碼即是BOM。故在Java端的撰寫如下:


    File file = new File("test.csv");
    FileOutputStream out=null;
    OutputStreamWriter osw=null;
    BufferedWriter bw=null;
    
    out = new FileOutputStream(file);
    byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
    out.write(uft8bom);
    osw = new OutputStreamWriter(out,StandardCharsets.UTF_8);
    bw = new BufferedWriter(osw);
    bw.append("TEST,中文,是否\r\n");
    bw.close();
    

Reference :
[1] BOM (隐藏字符)
[2] JAVA/SERVLET 以UTF-8导出CSV文件时产生乱码的解决方法

沒有留言:

張貼留言