JAVA輸出帶BOM的UTF-8編碼的檔案 - 程式人生
文章推薦指數: 80 %
微軟在UTF-8 中使用BOM 是因為這樣可以把UTF-8 和ASCII 等編碼明確區分開。
否則用Excel開啟CSV檔案有可能是亂碼的示例程式碼如下: response.
程式人生>>JAVA輸出帶BOM的UTF-8編碼的檔案
JAVA輸出帶BOM的UTF-8編碼的檔案
阿新••發佈:2019-01-26
當從http的response輸出CSV檔案的時候,設定為utf8的時候預設是不帶bom的,但是windows的Excel是使用bom來確認utf8編碼的,所有需要把bom寫到檔案的開頭。
微軟在UTF-8中使用BOM是因為這樣可以把UTF-8和ASCII等編碼明確區分開。
否則用Excel開啟CSV檔案有可能是亂碼的示例程式碼如下:response.setContentType("text/csv");response.setHeader("Content-Disposition","attachment;filename="+fileName);response.setCharacterEncoding("UTF-8");byte[]uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};OutputStreamout=response.getOutputStream();out.write(uft8bom);OutputStreamWriterwriter=newOutputStreamWriter(out,"UTF-8");//writeothercontent...什麼是BOM:BOM(byte-ordermark),即位元組順序標記,它是插入到以UTF-8、UTF16或UTF-32編碼Unicode檔案開頭的特殊標記,用來識別Unicode檔案的編碼型別。
對於UTF-8來說,BOM並不是必須的,因為BOM是用來標記多位元組編碼檔案的編碼型別和位元組順序(big-endian或little-endian)。
而UTF8中,每個字元的編碼有多少位是通過第一個位元組來表述的,而且沒有big-endian和little-endian的區分,見後述。
BOMs檔案頭: 0000FEFF =UTF-32,big-endian FFFE0000 =UTF-32,little-endian EFBBBF =UTF-8, FEFF =UTF-16,big-endian FFFE =UTF-16,little-endian還有一個要注意的是:UTF-8的網頁程式碼不應使用BOM,否則常常會出錯:在網頁上使用BOM是個錯誤。
BOM設計出來不是用來支援HTML和XML的。
要識別文字編碼,HTML有charset屬性,XML有encoding屬性,沒必要拉BOM撐場面。
雖然理論上BOM可以用來識別UTF-16編碼的HTML頁面,但實際工程上很少有人這麼幹。
畢竟UTF-16這種編碼連ASCII都雙位元組,實在不適用於做網頁。
Windows使用BOM的歷史原因:通常BOM是用來標示Unicode純文字位元組流的,用來提供一種方便的方法讓文字處理程式識別讀入的.txt檔案是哪個Unicode編碼(UTF-8,UTF-16BE,UTF-16LE)。
Windows相對對BOM處理比較好,是因為Windows把Unicode識別程式碼整合進了API裡,主要是CreateFile()。
開啟文字檔案時它會自動識別並剔除BOM。
Windows用這個有歷史原因,因為它最初脫胎於多內碼表的環境。
而引入Unicode時Windows的設計者又希望能在使用者不注意的情況下同時相容Unicode和非Unicode(Multiplebyte)文字檔案,就只能藉助這種小trick了。
帶BOM的文字檔案在Linux/unix環境又經常會遇到問題:知乎介紹的很詳細:http://www.zhihu.com/question/20167122文字檔案解析: 文字檔案對應於人類可以閱讀的文字,如何從2進位制轉換為文字檔案呢?起初由於計算機在美國發明,自然大家考慮的是英語如何表示,英語字母總共26個,加上特殊字元,128個字元,7位既一個byte即可表示出來。
這個就是大家所熟知的ascill編碼。
對應關係很簡單,一個字元對應一一個byte。
但很快發現,其他非英語國家的文字遠遠超過ascill碼,這時候大家當然想統一一下,不同國家出了自己不同的編碼方式,中國的gb2312就是自己做出來的編碼方式,這樣下去每個國家都有自己的編碼方式,來回轉換太麻煩了。
這時候出現了新的編碼方式,unicode編碼方式,想將編碼統一,所以規定了每個字元對應的unicode碼。
1、很多檔案都是ascii編碼,如果用unicode太浪費。
2、沒有標誌位說明該幾個位元組來解析為一個符號。
這時候拯救世界的utf出現了,utf是unicode的一種實現,只不過更聰明瞭。
utf16是佔用兩位元組,或者四位元組,utf32是佔用四位元組。
utf8是很聰明的一種表示方式。
1、對於單位元組符號,位元組第一位為0,後面7位表示位元組編碼。
2、對於n位元組符號,第一位元組的前n位都設為1,第n+1位為0,其餘位用於編碼。
對於不同的編碼,在文字的最前方有不同的標誌,unicode通常有兩位來表示分別是fffe,或者feff,fffe表示litte-endian編碼feff表示big-endian編碼。
utf8是efbbbf來開頭的。
可以看出來utf-8是自解釋的,所以不用帶這個標誌檔案,大多數程式是可以識別的。
但有些程式不能識別這個標誌,比如php就會直接把這個標誌當文字解析,不會忽略。
純程式碼TableView例項
«上一篇
hive1.2.1原始碼匯入eclipse閱讀以及除錯下一篇»
相關推薦
在Java中讀寫UTF-8編碼檔案
在C#中,採用System.IO.StreamReader和System.IO.StreamWriter直接讀寫UTF-8編...
java輸出日誌到指定檔案中
1.在我們專案開發中經常要將專案的異常日誌輸出到制定看路徑的檔案中,下面用java實現日誌輸出功能。
直接上程式碼如下所示:/** ...
關於Python文件讀取UTF-8編碼檔案問題
引用codecs模組,來判斷前三個位元組是否為BOM_UTF8。
如果是,則剔除\xef\xbb\xbf位元組
importcodecs
de...
J2ME讀取UTF-8編碼檔案方法
在進入正題前先說點別的,Polish更新到2.0bate2了,增加了N多東西。
看api學習已經變的非常繁重而且不易實現...
ISO8859(GBK)編碼檔案轉碼到UTF-8編碼檔案
問題產生:
現需要把一個在windows的Myeclipse下開發的小程式,轉到Linux系統下去安裝執行...
JAVA輸出帶BOM的UTF-8編碼的檔案
當從http的response輸出CSV檔案的時候,設定為utf8的時候預設是不帶bom的,但是windows的Excel是...
day02迴圈、格式化輸出、運算子、編碼
01昨日內容回顧python2xpython3x區別:python2x:原始碼重複,不規範。
python3x:原始碼規範,優美,清晰,簡單。
編譯...
java程式碼實現LogBack動態輸出日誌【無配置檔案純程式碼】
需求: 需要傳入某一個檔案或者類或者方法的名字,生成對應日誌檔案,且每一個傳入...
while迴圈/格式化輸出/運算子/編碼
1.while迴圈
while條件:
迴圈體(break,continue)
else:
迴圈體(break,continu...
RobotFramework:日誌輸出中文Unicode編碼
robotframework輸出日誌時,中文顯示為Unicode編碼。
修改方法:
在Python27\Lib\site-packages\robotf...
搜尋
基礎教學
Mysql入門
Sql入門
Android入門
Docker入門
Go語言入門
Ruby程式入門
Python入門
Python進階
Django入門
Python爬蟲入門
最近訪問
JAVA輸出帶BOM的UTF-8編碼的檔案
在LaTeX中使用強大的pgfplots繪圖包
安裝Termux的手機上執行Python
Glide下載圖片並儲存到指定路徑
python+web框架的介紹
mongodb建立資料庫和配置使用者
'react-scripts'+不是內部或外部命令,也不是可執行的程式+或批處理檔案--解決方案
C+++set用法總結(整理)
高職院校對口單招資訊一類《專業技能》模擬試題(程式設計題)
SpringMVC詳解(一)------入門例項
延伸文章資訊
- 1web 匯出EXCEL亂碼,因為沒有BOM - iT 邦幫忙
用記事本開| 正常顯示用EXCEL開| 亂碼查看記事本編碼| utf-8. 原因因為沒有BOM, ... 怎麼讓它有BOM,我們可以用stream,stream指定UTF8的話,就會自動加上BOM了.
- 2[Excel教學] 3步驟快速解決打開CSV檔亂碼問題 - impochun blog
原理:既然我下載來的csv檔案編碼(UTF8編碼)excel直接開啟會有問題,那麼我們就來重新做一個Excel看得懂的檔案(加入BOM)。
- 3JAVA輸出帶BOM的UTF-8編碼的檔案 - 程式人生
微軟在UTF-8 中使用BOM 是因為這樣可以把UTF-8 和ASCII 等編碼明確區分開。 否則用Excel開啟CSV檔案有可能是亂碼的示例程式碼如下: response.
- 4Excel 2007 轉換為Csv 檔案時(UTF-8),特殊字元(如希臘字母)
Excel 2010 以前不能輸出UTF-8 的csv 。 有BOM 的UTF-8 csv 則可讀入。 把問題寫到網友看得懂是發問者的責任,讓人花很多時間才搞懂或是才能溝通的文章, ...
- 5NOTES-產生具有BOM的UTF8編碼檔案 - 黑暗執行緒
File.WriteAllText與StreamWriter在沒有指定Encoding.UTF8時,會產出UTF-8編碼但沒有BOM的檔案; 以下的範例中,只有F2.csv、F4.csv可以正確...