1.需求:
導出csv檔案到指定路徑,編碼格式為UTF-8.
2.解決方法
2.1:指定UTF-8
- OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");
- osw.write(result);
- osw.flush();
用NOTEPAD++打開時,顯示正常。然後,在NOTEPADD++中查了一下檔案編碼,發現是以UTF-8無BOM格式編碼,用EXCEL打開為亂碼.
2.2:增加BOM
- OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");
- osw.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));
- osw.write(result);
- osw.flush();
以上為網上的解決方案, NOTEPADD++檢視導出檔案仍然是 以UTF-8無BOM格式編碼,用EXCEL打開為亂碼。此方案并沒什麼卵用。
2.3:把BOM資訊指定為UTF-8
- OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");
- osw.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF },"UTF-8"));
- osw.write(result);
- osw.flush();
測試結果: NOTEPADD++檢視 導出檔案是 以UTF-8格式編碼。用EXCEL打開正常顯示。搞定!!!