將查詢的數(shù)據(jù)以xls文件導(dǎo)出時(UTF-8編碼),數(shù)據(jù)正常;但以CSV文件導(dǎo)出時,文件中的中文亂碼,同樣是UTF-8編碼,改成GBK編碼導(dǎo)出時,中文顯示正常。(推薦:java視頻教程)
解決方法:
以CSV方式導(dǎo)出的文件中默認(rèn)不含BOM信息,通過給將要輸出的內(nèi)容設(shè)置BOM標(biāo)識(以 EF BB BF 開頭的字節(jié)流)即可解決該問題。具體方法如下:
... OutputStreamWriter outputStreamWriter = new OutputStreamWriter(response.getOutputStream(), "UTF-8"); // 要輸出的內(nèi)容 result = (String)contentMap.get(RESPONSE_RESULT); response.setHeader("Content-Disposition", "attachment;filename=test.csv"); outputStreamWriter.write(new String(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF})); outputStreamWriter.write(result); outputStreamWriter.flush();
如果是以O(shè)utputStream流實(shí)現(xiàn)的 ,參數(shù)可以按如下修改:
out = response.getOutputStream(); //加上UTF-8文件的標(biāo)識字符 out.write(new byte []{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});