1. 程式人生 > >JAVA匯出CSV檔案時產生亂碼的解決方法

JAVA匯出CSV檔案時產生亂碼的解決方法

Java程式碼  收藏程式碼
  1. OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");  
  2. // 要輸出的內容  
  3. result = (String)contentMap.get(RESPONSE_RESULT);  
  4. resp.setHeader("Content-Disposition""attachment;filename=test.csv");  
  5. osw.write(result);  
  6. osw.flush();  

 通過以上程式碼將內容輸出至CSV檔案中後,用EXCEL開啟檔案時,總是產生亂碼,但是用NOTEPAD++開啟時,顯示正常。然後,在NOTEPADD++的“格式”工具欄中查了一下檔案編碼,發現是“以UTF-8無BOM格式編碼”,然後試著將其改為“以UTF-8格式編碼”後,再用EXCEL開啟時,OK,一切顯示正常。那麼,這麼說明EXCEL是支援UTF-8格式的CSV檔案的。同時,也說明,通過以上方式匯出的檔案中是不含BOM資訊

的(關於BOM資訊請自行谷歌一下)。那麼,接下來,為了要讓EXCEL正確的顯示,要做的事就很明顯了----手動的給將要輸出的內容加上BOM標識。具體方法如下:

Java程式碼
  1. OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");  
  2. // 要輸出的內容  
  3. result = (String)contentMap.get(RESPONSE_RESULT);  
  4. resp.setHeader("Content-Disposition""attachment;filename=test.csv"
    );  
  5. osw.write(new String(new byte[] { (byte0xEF, (byte0xBB,(byte0xBF }));  
  6. osw.write(result);  
  7. osw.flush();  

 重點就是上面的紅色程式碼(哎,ITEYE的這個編輯器怎麼了,設定了顏色顯示不出來)了(即倒數第三行程式碼),至於為什麼要新增這個,只要你自己谷歌過BOM的話,自然就明白了。

另外,如果你使用的是Response的OUT進行輸出的話,可以這麼搞:

Java程式碼
  1. out = response.getOutputStream();     
  2. //加上UTF-8檔案的標識字元    
      
  3. out.write(new   byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });