匯出csv檔案有亂碼

2021-06-21 15:26:12 字數 1027 閱讀 9999

專案中生成csv檔案,裡面出現中文亂碼問題,後來加了一行out.write(0xfeff)後問題就解決了。

res.setheader("content-disposition", "attachment;filename=" + name+ ".csv");

out.write(0xfeff);

out.write(sb);

這裡有乙個概念:byte order mark

bom(byte-order mark),即位元組順序標記,它是插入到以utf-8、utf16或utf-32編碼unicode檔案開頭的特殊標記,用來識別unicode檔案的編碼型別。對於utf-8來說,bom並不是必須的,因為bom用來標記多位元組編碼檔案的編碼型別和位元組順序(big-endian或little-endian)。

在絕大多數編輯器中都看不到bom字元,因為它們能理解unicode,去掉了讀取器看不到的題頭資訊。若要檢視某個unicode檔案是否以bom開頭,可以使用十六進製制編輯器。下表列出了不同編碼所對應的bom。

bom encoding

ef bb bf utf-8

fe ff utf-16 (big-endian)

ff fe utf-16 (little-endian)

00 00 fe ff utf-32 (big-endian)

ff fe 00 00 utf-32 (little-endian)

bom的來歷

為了識別 unicode 檔案,microsoft 建議所有的 unicode 檔案應該以 zero width nobreak space(u+feff)字元開頭。這作為乙個「特徵符」或「位元組順序標記(byte-order mark,bom)」來識別檔案中使用的編碼和位元組順序。

linux/unix 並沒有使用 bom,因為它會破壞現有的 ascii 檔案的語法約定。

不同的編輯工具對bom的處理也各不相同。使用windows自帶的記事本將檔案儲存為utf-8編碼的時候,記事本會自動在檔案開頭插入bom(雖然bom對utf-8來說並不是必須的),但是editplus就不會這樣做。

php匯出csv檔案無亂碼示例

ini set error reporting e all ini set display startup errors 1 ini set display errors 1 function escapecsv str return str function iconvstr str intent...

csv檔案亂碼

問題描述 生成的csv檔案,設定為utf 8格式,在windows上用excel開啟的話會亂碼,在linux上用vim或者cat開啟檢視正常 設定為gbk格式的話,在windows上用excel開啟正常,但在linux上亂碼 解決方法 在csv檔案頭部的最前面加bom bom byte order ...

PHP 匯出csv檔案亂碼解決方案

我們經常匯出csv檔案都喜歡直接用file put contents file name file 這種方式直接匯出,如果沒有中文字元還好,要是有中文字元的話就會出現亂碼的情況,讓人很是頭疼,下面是亂碼解決方案 str 匯出的含有中文字元的內容 fp fopen export.csv a 在寫入資料...