utf-8編碼寫出csv檔案Excel開啟亂碼問題解決_U繡花同志
文章推薦指數: 80 %
其實是UTF-8檔案的Unicode簽名BOM(Byte Order Mark) ... 在UCS 編碼中有一個叫做"ZERO WIDTH NO-BREAK SPACE"的字元,它的編碼是FEFF。
MdEditor
utf-8編碼寫出csv檔案Excel開啟亂碼問題解決
語言:CN/TW/HK
時間 2021-01-1916:01:54
U繡花同志
主題:
mark
ultraedit
java
原因:
是因為輸出的檔案總沒有BOM
BOM是ByteOrderMark(定義位元組順序),因為在網路傳輸中分兩種順序:大頭和小頭
其實是UTF-8檔案的Unicode簽名BOM(ByteOrderMark)
解決方式:
//0xEF,0xBB,0xBB寫入BOM
byte[]bytes={(byte)0xEF,(byte)0xBB,(byte)0xBB};
在UCS編碼中有一個叫做"ZEROWIDTHNO-BREAKSPACE"的字元,它的編碼是FEFF。
而FFFE在UCS中是不存在的字元,所以不應該出現在實際傳輸中。
UCS規範建議我們在傳輸位元組流前,先傳輸字元"ZEROWIDTHNO-BREAKSPACE"。
這樣接受者如果收到FEFF,就表明這個位元組流是Big-Endian的;
如果收到FFFE,就表明這個位元組流是Little-Endian的。
因此字元"ZEROWIDTHNO-BREAKSPACE"又被稱作BOM。
UTF-8不需要BOM來表明位元組順序,但可以用BOM來表明編碼方式。
字元"ZEROWIDTHNO-BREAKSPACE"的UTF-8編碼是EFBBBF。
所以如果接收者收到以EFBBBF開頭的位元組流,就知道這是UTF-8編碼了。
Windows就是使用BOM來標記文字檔案的編碼方式的。
在UTF-16裡本來是FFFE,變成UTF-8就成了EFBBBF。
這個標記是可選的,因為UTF8位元組沒有順序,所以它可以被用來檢測一個位元組流是否是UTF-8編碼的。
微軟做這種檢測,但有些軟體不做這種檢測,而把它當作正常字元處理。
微軟在自己的UTF-8格式的文字檔案之前加上了EFBBBF三個位元組,windows上面的notepad等程式就是根據這三個位元組來確定一個文字檔案是ASCII的還是UTF-8的,然而這個只是微軟暗自作的標記,其它平臺上並沒有對UTF-8文字檔案做個這樣的標記。
也就是說一個UTF-8檔案可能有BOM,也可能沒有BOM,那麼怎麼區分呢?
三種方法:
用UltraEdit-32開啟檔案,切換到十六進位制編輯模式,察看檔案頭部是否有EFBBBF。
用Dreamweaver開啟,察看頁面屬性,看“包括Unicode簽名BOM”前面是否有個勾。
用Windows的記事本開啟,選擇“另存為”,看檔案的預設編碼是UTF-8還是ANSI,如果是ANSI則不帶BOM。
另外還有一些編碼的小知識:
所謂的unicode儲存的檔案實際上是utf-16,只不過恰好跟unicode的碼相同而已,但在概念上unicode與utf是兩回事,unicode是記憶體編碼表示方案,而utf是如何儲存和傳輸unicode的方案。
utf-16還分高位在前(LE)和高位在後(BE)兩種。
官方的utf編碼還有utf-32,也分LE和BE。
非unicode官方的utf編碼還有utf-7,主要用於郵件傳輸。
utf-8的單位元組部分是和iso-8859-1相容的,這主要是一些舊的系統和庫函式不能正確處理utf-16而被迫出來的,而且對英語字元來說,也節省儲存的檔案空間(以非英語字元浪費空間為代價)。
在iso-8859-1的時候,utf8和iso-8859-1都是用一個位元組表示的,當表示其它字元的時候,utf-8會使用兩個或三個位元組
轉自:https://www.cnblogs.com/SnowyDong/p/9467632.html
「其他文章」
mybatis傳入的值為0時的判斷
utf-8編碼寫出csv檔案Excel開啟亂碼問題解決
springboot手動開啟事務及提交事務
「mark」
分散式事務解決方案之可靠訊息最終一致性
分散式事務解決方案之TCC
js-mark新時代的網頁標記容器
深度學習六十年簡史
FlyFish2.0版本後端原始碼學習筆記
Pytest----如何使用mark
內卷大廠系列《連結串列反轉三連擊》
內卷大廠系列《跳躍遊戲三連擊》
成立不到兩年的LightMark小白光,如何實現對千億鑽石行業的顛覆?
當你瞭解了Apahce的過去,你就瞭解了ApacheWay
「ultraedit」
Xshell6提示“要繼續使用此程式,您必須應用最新的更新或使用新版本”
UEStudio最新版v21:改進內部解析引擎
大神論壇逆向脫殼分析基礎學習筆記一進位制篇
Linux下如何不停止服務,清空nohup.out檔案
UltraEdit文字編輯器教程:對動態巨集使用“複製”和“選定”變數
UltraEdit文字編輯器教程:編寫強大的巨集
更快,更智慧的編輯其UltraEditV28釋出!
UltraEdit文字編輯器教程:UltraEdit/UEStudio指令碼訪問剪貼簿內容
UltraEdit文字編輯器整合指令碼引擎教程
UltraEdit文字編輯器教程:將Yahoo!,Google,Wikipedia等與UltraEdit整合
延伸文章資訊
- 1NOTES-產生具有BOM的UTF8編碼檔案 - 黑暗執行緒
File.WriteAllText與StreamWriter在沒有指定Encoding.UTF8時,會產出UTF-8編碼但沒有BOM的檔案; 以下的範例中,只有F2.csv、F4.csv可以正確...
- 2utf-8編碼寫出csv檔案Excel開啟亂碼問題解決_U繡花同志
其實是UTF-8檔案的Unicode簽名BOM(Byte Order Mark) ... 在UCS 編碼中有一個叫做"ZERO WIDTH NO-BREAK SPACE"的字元,它的編碼是FEFF。
- 3[python] 解決生成csv file編碼問題(with BOM) - JysBlog
當我們使用UTF-8生成csv時,並未在header生成BOM訊息,所以Excel會依照Unicode編碼讀取,就會有亂碼產生。 實作. 下面是簡單的生成csv的python程式:.
- 4[Excel教學] 3步驟快速解決打開CSV檔亂碼問題 - impochun blog
原理:既然我下載來的csv檔案編碼(UTF8編碼)excel直接開啟會有問題,那麼我們就來重新做一個Excel看得懂的檔案(加入BOM)。
- 5Excel 2007 轉換為Csv 檔案時(UTF-8),特殊字元(如希臘字母)
Excel 2010 以前不能輸出UTF-8 的csv 。 有BOM 的UTF-8 csv 則可讀入。 把問題寫到網友看得懂是發問者的責任,讓人花很多時間才搞懂或是才能溝通的文章, ...