文字檔案與二進位制檔案、Unicode字元編碼 - 程式人生

文章推薦指數: 80 %
投票人數:10人

BOM是一個有點小聰明的想法:在UCS編碼中有一個叫做"ZERO WIDTH NO-BREAK SPACE"的字元,它的編碼是FEFF。

而FFFE在UCS中是不存在的字元,所以不應該出現在 ... 程式人生>>文字檔案與二進位制檔案、Unicode字元編碼 文字檔案與二進位制檔案、Unicode字元編碼 阿新••發佈:2019-02-12 從網上找到一篇文章,寫的挺基礎,通俗易懂的,和大家分享:     現在搞懂了文字檔案與二進位制檔案之間的關係啦. 我們可以利用二進位制編輯器檢視文字檔案. 上圖紅框中的左邊是十六進位制顯示的,右邊是文字(ascii 在程式中有這麼一句: 開始我不明白為什麼要寫兩個位元組的"fffe",後才上網查了一下資料才發現,這與編碼方式有關. UTF的位元組序和BOM UTF-8以位元組為編碼單元,沒有位元組序的問題。

UTF-16以兩個位元組為編碼單元,在解釋一個UTF-16文字前,首先要弄清楚每個編碼單元的位元組序。

例如收到一個"奎"的Unicode編碼是594E,"乙"的Unicode編碼是4E59。

如果我們收到UTF-16位元組流"594E",那麼這是"奎"還是"乙"? Unicode規範中推薦的標記位元組順序的方法是BOM。

BOM不是"BillOfMaterial"的BOM表,而是ByteOrderMark。

BOM是一個有點小聰明的想法:在UCS編碼中有一個叫做"ZEROWIDTHNO-BREAKSPACE"的字元,它的編碼是FEFF。

而FFFE在UCS中是不存在的字元,所以不應該出現在實際傳輸中。

UCS規範建議我們在傳輸位元組流前,先傳輸字元"ZEROWIDTH NO-BREAKSPACE"。

這樣如果接收者收到FEFF,就表明這個位元組流是Big-Endian的;如果收到FFFE,就表明這個位元組流是Little-Endian的。

因此字元"ZEROWIDTHNO-BREAKSPACE"又被稱作BOM。

UTF-8不需要BOM來表明位元組順序,但可以用BOM來表明編碼方式。

字元"ZEROWIDTHNO-BREAKSPACE"的UTF-8編碼是EFBBBF。

所以如果接收者收到以EFBBBF開頭的位元組流,就知道這是UTF-8編碼了。

Windows就是使用BOM來標記文字檔案的編碼方式的。

———————————————————- 好了﹐這些問題解決後﹐我們就來做單純的文字檔案的編碼識別﹐讀取與寫入測試吧。

以windows的notepad為例(其它的文字檔案讀取軟體的原理應該也差不多﹐只是會多一些特殊的判斷演算法而已)。

notepad預設有四種編碼來儲存和讀取文字檔案。

分別是﹕ ANSI,Unicode,Unicode-big-endian和UTF-8。

首先來講ANSI吧﹐這個是windows作業系統在區域與語言塊設定的編碼(也就是系統預設的編碼)﹐因此像繁體作業系統就是big5,而簡體作業系統則是GBK。

而Unicode和UTF-8這兩種格式相信大家已經有所瞭解(當然前者是unicode-16) 而Unicode-big-endian是什麼意思呢﹐它與Unicode幾乎一樣﹐只是它把高位放在前面(而後者則剛好相反) 上面的摘錄已經有所說明﹐這裡再解釋一下﹕ 如同樣是字元"A"﹐在以下幾種格式中的儲存形式分別是﹕ UTF-16big-endian:0041 UTF-16little-endian:4100 UTF-32big-endian:00000041 UTF-32little-endian:41000000 好了﹐大家想一想﹐文字檔案在硬碟中是以位元組形式儲存的﹐如果不知道文字檔案的編碼﹐那是無論如何也不能正確讀出文字檔案顯示給使用者看的(亂碼了只有人才知道﹐程式則認為一切正常) 根據BOM的規則﹐因此在一段位元組流開始時﹐如果接收到以下位元組﹐則分別表明了該文字檔案的編碼。

UTF-8:EFBBBF UTF-16:FFFE UTF-16big-endian:FEFF UTF-32little-endian:FFFE0000 UTF-32big-endian:0000FEFF 而如果不是以這個開頭﹐那程式則會以ANSI,也就是系統預設編碼讀取 單例模式之懶漢模式(延遲載入) «上一篇 配置Eclipse的hadoop-eclipse-plugin.jar(自學隨筆)下一篇» 相關推薦 文字檔案與二進位制檔案區別 1)文字檔案:這類檔案以文字的ASCII碼形式儲存在計算機中。

它是以"行"為基本結構的一種資訊組織和儲存方式。

  2)二進位制... fopen,文字檔案與二進位制檔案 暮鼓集   行走集 在學習C語言檔案操作後,我們都會知道開啟檔案的函式是fopen,也知道它的第... 淺談C語言中文字檔案與二進位制檔案 C語言中,按檔案中的資料組織形式來分,資料檔案可分為ASCII碼檔案(即文字檔案)和二進位制檔案。

文字檔案在磁碟中存放時每... 文字檔案與二進位制檔案、Unicode字元編碼 從網上找到一篇文章,寫的挺基礎,通俗易懂的,和大家分享:     現在搞懂了文字檔案與二進位制檔案之間的關係啦. ... 文字檔案與二進位制的區別 簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼有ASCII編碼,UNICODE編碼等等。

二進位制檔案是基於值編碼的檔案,你可以根據具體應用,指定某個值是什麼... 文字方式與二進位制方式讀寫檔案的windows區別總結 一、寫   二進位制方式寫,當遇到整型和浮點數時是以小端模式的整個十六進位制值寫入到檔案中(和記憶體中一樣),當遇到a... pythonfile模組中的文字檔案和二進位制檔案以及字串和byte的理解 大前提:文字檔案和二進位制檔案都是以二進位制的方式存放到硬碟中的 看圖先~ 1.Pythonfile讀寫加不加b ... 文字檔案和二進位制檔案的區別和聯絡  今天閒來無事,也學一下別人寫一下部落格:  在一些專案中常遇到一些檔案的操作,今天就總結一下。

或許自己寫一寫,把思路縷一... 文字檔案和二進位制檔案判定 現在我有一個小說檔案:完美世界.txt。

它是文字檔案,我把它字尾改了,變成:完美世界.avi。

那麼其實它還是一個... java中如何判斷一個檔案是二進位制檔案還是文字檔案? 現在的做法是把檔案讀進來,逐個解析每一個byte,如果有一個byte<0那麼斷定這個檔案是二進位制的,這在純英文的環境下... 搜尋 基礎教學 Mysql入門 Sql入門 Android入門 Docker入門 Go語言入門 Ruby程式入門 Python入門 Python進階 Django入門 Python爬蟲入門 最近訪問 文字檔案與二進位制檔案、Unicode字元編碼 在ASP.NET中動態建立柱狀圖和餅圖 開源電子書專案FBReader初探(六) 【Socket程式設計】Python用udp實現簡易ping Xcode編譯報錯duplicate+symbol+_base64Decode+in: openGL學習筆記1(入門----如何繪製++直線、多邊形、圓、利用圖片繪製圖形等) Android+EditText+改變邊框顏色 ROM、RAM、IROM、IRAM、DRAM、SRAM、Flash介紹 C++如何輸入多行字串(含空格) C++之佇列和優先佇列



請為這篇文章評分?