java導出csv內容亂碼

/**
     * CSV文件生成方法
     * @param head表單頭
     * @param dataList表單內容
     * @param outPutPath輸出路徑
     * @param filename表單文件名
     * @return
     */
    public static File createCSVFile(List<Object> head, List<List<Object>> dataList,String outPutPath, String filename) {
        File csvFile = null;
        BufferedWriter csvWtriter = null;
        try {
            csvFile = new File(outPutPath + File.separator + filename + ".csv");
            File parent = csvFile.getParentFile();
            FileOutputStream fos = new FileOutputStream(csvFile);
            // 寫入bom頭
             byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
            fos.write(uft8bom);
         
            if (parent != null && !parent.exists()) {
                parent.mkdirs();
            }
            csvFile.createNewFile();
 
            // GB2312使正確讀取分隔符","
            csvWtriter = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"));
            // 寫入文件頭部
            writeRow(head, csvWtriter);
 
            // 寫入文件內容
            for (List<Object> row : dataList) {
                writeRow(row, csvWtriter);
            }
            csvWtriter.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                csvWtriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return csvFile;
    }

備註:以上是修正後的代碼,正確無誤。

原因是導出的csv文件開頭缺少BOM (BOM就是這3個字節 :"EF BB BF" ,BOM的全稱叫做"Byte Order Mark")字符,導致微軟的記事本Word等打開無法識別部分漢字。win平臺默認的utf8編碼的文本性文件帶有BOM,但是java轉換流寫入的utf8文件不帶BOM,所有Java導出的文件不帶bom會導致部分漢字亂碼。

所以解決辦法:加上bom頭  

byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
fos.write(uft8bom);

Java導出cvs文件的詳細代碼請查看:點擊此處跳轉

參考:https://www.cnblogs.com/qq2267711589/p/10822682.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章