久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

存文本文件及其字符編碼

 子午天地 2014-05-04

網上也有許多關于純文本的討論,如果在搜索“亂碼”,,更是不盡其數(shù),。如果你開始命令行,開始編碼,,開始數(shù)據分析,,開始操作中文,存文本及其字符編碼便是最基礎的東西,。而往往基礎的東西,,真正弄懂更為不易,而或者你已經有了多年相關的經驗,,也不一定搞清楚了,。

什么是存文本文件,?

存文本由可打印字符組成,人可以直接閱讀和理解其形式,。

純文本并非意味著文本是無結構的,,HTML、SGML,、XML等都是有良好結構定義的存文本,,與直接的二進制編碼相比,純文本所處的層面往往更高,。大多數(shù)二進制格式的問題在于,,理解數(shù)據所必須的語境與數(shù)據本身是分離的,沒有應用邏輯對其進行解釋,,這些數(shù)據絕對沒有意義,,但是通過存文本,可以獲得自描述的,、不依賴創(chuàng)建它的應用的數(shù)據流,。對于大多數(shù)二進制文件,要成功的進行解析,,你必須了解整個格式的所有細節(jié),。

缺點:

  • 與壓縮的二進制格式相比,存儲純文本所需空間更多
  • 要解釋與處理純文本文件,,計算上的代價可能更昂貴

優(yōu)點:

  • 保證不過時,,KEEP KNOWLEDGE IN PLAIN TEXT.
  • 更易于測試

各種聲音

有關于純文本文件的各種聲音,是不同角度,,不同前提對于其的描述
  • 與純文本對應的是二進制文件
  • 純文本文件是一種特殊的二進制文件,,其可以直接轉義成可讀的字符
  • 由于字符編碼方式的不同,純文本的底層表示也不盡相同
  • 純文本可由文本編輯器,、或者命令直接讀取,,二進制也可以
  • 字符文件就是文本文件
  • 純文本文件只包含可顯示的ASCII字符
  • At a generic level of description, there are two kinds of computer files: text files and binary files.
  • 只要該文件內容的每個字節(jié)都是ASCII碼,或者說,,只要構成文件內容的每一個字節(jié)的高位都是0的話,,這個文件就是純文本文件
  • 在計算機文件系統(tǒng)中”主要功能”是用于存儲文字編碼信息的文件叫文本文件.信息必須包括:文字存儲(哪種編碼不論),其他輔助信息包括:文字圖表顯示控制,打印腳本,多媒體信息等
  • 在計算機文件系統(tǒng)中”只”是用于存儲文字編碼信息的文件叫純文本文件,它只包含了文字編碼,而不包括文字控制信息和其他媒體信息.
  • A plain text file is a type of file. Files can either be binary (machine code) or plain text (English or native language).
  •  Plain text, as you might have guessed, is rather plain. It supports standard ASCII characters, including numbers, symbols, and spaces, but does not support any type of text formatting.
  • You can use a basic text editor such as Notepad or WordPad (for Windows) or TextEdit (for Mac) to create a plain text document. Other word processing programs can also create plain text documents, but you may have to use the “Save As…” command and choose the plain text option when saving the file.
  • Plain text is a pure sequence of character codes; plain Unicode-encoded text is therefore a sequence of Unicode character codes.

文件構成的要素

  • 文件名
  • 類型 xml,html,,txt,,bat, c, ini, php, pl, js, css, fasta, fastq
  • 格式 ANSI/ASCII,UTF-8,,UTF-8(no BOM),UTF-16,,Unicode
  • 換行符,,win CR/LF mac CR Unix LF

結論

計算機的一切,,到底都是二進制的,所以文本文件是一種特殊的二進制文件,,特殊在于這些二進制都對應字符編碼,,可以容易的進行各種操作。

——2013年5月15日

格式或者編碼格式及其字符集

最重要或者最難理解的就是其編碼格式,,計算機中最小的操作單位是字節(jié)(Byte),,通常每8位(bit)組成一個字節(jié),1KB=1024Byte=1024*8bit,,二進制也就是由0和1組成的串,,為了書寫或者表示的方便,通常用16進制來表示二進制,,如下表格:

0000 0001 0010 0011 0100 0101 0110 0111
0 1 2 3 4 5 6 7
1000 1001 1010 1011 1100 1101 1110 1111
8 9 A B C D E F

一個字節(jié)可以用兩位的十六進制表示,,00~FF,共256位0~255,。下表是二進制的位數(shù),,可以表示的字符數(shù)目。

2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7 2^8 2^9 2^10
0 2 4 8 16 32 64 128 256 512 1024

二進制如何表示字符,,也就是編碼格式標準制定的緣由,。總的來講,,編碼可以分為兩類:

  1. Unicode,,統(tǒng)一碼、萬國碼,、單一碼,,世界碼,旨在全球建立統(tǒng)一標準
  2. ANSI,,可以理解為國標,,美國的ASCII,中國的GB2312,,Big5,,歐洲的Latin等,多了去了

Unicode

Unicode is a computing industry standard for the consistent encoding, representation and handling of text expressed in most of the world’s writing systems.

在表示一個Unicode的字符時,,通常會用“U+”然后緊接著一組十六進制的數(shù)字來表示這一個字符,。Unicode的實現(xiàn)方式不同于編碼方式。一個字符的Unicode編碼是確定的,。但是在實際傳輸過程中,,由于不同系統(tǒng)平臺的設計不一定一致,以及出于節(jié)省空間的目的,,對Unicode編碼的實現(xiàn)方式有所不同,。Unicode的實現(xiàn)方式稱為Unicode轉換格式(Unicode Transformation Format,,簡稱為UTF)。

目前通用的實現(xiàn)方式是UTF-16小端序(LE),、UTF-16大端序(BE)和UTF-8,。在Windows 附帶的記事本(Notepad)中,“另存為”對話框可以選擇的四種編碼方式除去非Unicode編碼的ANSI(對于英文系統(tǒng)即ASCII編碼,,中文系統(tǒng)則為GB2312或Big5編碼) 外,,其余三種為“Unicode”(對應UTF-16 LE)、“Unicode big endian”(對應UTF-16 BE)和“UTF-8”,。

UTF-8是UNICODE的一種變長字符編碼,,由Ken Thompson于1992年創(chuàng)建。現(xiàn)在已經標準化為RFC 3629,。UTF-8用1到6個字節(jié)編碼UNICODE字符,。

從Unicode到UTF-8的編碼方式如下:

Unicode編碼(16進制)  UTF-8 字節(jié)流(二進制)
000000 – 00007F 0xxxxxxx
000080 – 0007FF 110xxxxx 10xxxxxx
000800 – 00FFFF 1110xxxx 10xxxxxx 10xxxxxx
010000 – 10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-8的特點是對不同范圍的字符使用不同長度的編碼。對于0×00-0x7F之間的字符,,UTF-8編碼與ASCII編碼完全相同,。UTF-8編碼的最大長度是4個字節(jié)。從上表可以看出,,4字節(jié)模板有21個x,,即可以容納21位二進制數(shù)字。Unicode的最大碼位0x10FFFF也只有21位,。

例如:“漢”字的Unicode編碼是0x6C49,。0x6C49在0×0800-0xFFFF之間,使用用3字節(jié) 模板了:1110xxxx 10xxxxxx 10xxxxxx,。將0x6C49寫成二進制是:0110 1100 0100 1001,, 用這個比特流依次代替模板中的x,得到:11100110 10110001 10001001,,即E6 B1 89,。

ANSI

對于ANSI編碼方式,存在不同的字符集(Charset),, 要正確解析一個ANSI字符串,,還要選擇正確的字符集,每個字符集都有一個唯一的編號,,稱為代碼頁(Code Page),。簡體中文(GB2312)的代碼頁為936,而系統(tǒng)默認字符集的代碼頁為0,,它表示根據系統(tǒng)的語言設置來選擇一個合適的字符集,。

漢字編碼

漢字編碼中現(xiàn)在主要用到的有三類,包括GBK,,GB2312和Big5,。

  • GB2312又稱國標碼GB2312規(guī)定“對任意一個圖形字符都采用兩個字節(jié)表示,,每個字節(jié)均采用七位編碼表示”,,習慣上稱第一個字節(jié)為“高字節(jié)”,,第二個字節(jié)為“低字節(jié)”。GB2312中漢字的編碼范圍為,,第一字節(jié)0xB0-0xF7(對應十進制為176-247),,第二個字節(jié)0xA0-0xFE(對應十進制為160-254)。
  • Big5又稱大五碼,,主要為香港與臺灣使用,,即是一個繁體字編碼。每個漢字由兩個字節(jié)構成,,第一個字節(jié)的范圍從0X81-0XFE(即129-255),,共126種。第二個字節(jié)的范圍不連續(xù),,分別為0X40-0X7E(即64-126),,0XA1-0XFE(即161-254),共157種,。
  • GBK是GB2312的擴展,,是向上兼容的,因此GB2312中的漢字的編碼與GBK中漢字的相同,。GBK中每個漢字仍然包含兩個字節(jié),,第一個字節(jié)的范圍是0×81-0xFE(即129-254),第二個字節(jié)的范圍是0×40-0xFE(即64-254),。GBK中有碼位23940個,,包含漢字21003個。
 R.C.   GB   Uni. UTF-8  R.C.   GB   Uni. UTF-8
 1601 啊 B0A1 554A E5958A 1602 阿 B0A2 963F E998BF
 1603 埃 B0A3 57C3 E59F83 1604 挨 B0A4 6328 E68CA8
 1605 哎 B0A5 54CE E5938E 1606 唉 B0A6 5509 E59489
 1607 哀 B0A7 54C0 E59380 1608 皚 B0A8 7691 E79A91
 1609 癌 B0A9 764C E7998C 1610 藹 B0AA 853C E894BC
 1611 矮 B0AB 77EE E79FAE 1612 艾 B0AC 827E E889BE
 1613 礙 B0AD 788D E7A28D 1614 愛 B0AE 7231 E788B1

ASCII

ASCII使用一個字節(jié)的其中7位二進制數(shù)來表示所有的大寫和小寫字母,,數(shù)字0 到9,、標點符號, 以及在美式英語中使用的特殊控制字符,。
ASCII編碼表

如何判斷是文本文件及其編碼,?

如前所述,每種編碼都有一種規(guī)范,,如果按照編碼方式,,能將其全部讀為字符串,就是文本文件,。由于編碼方式的差異,,程序是很容易通過判斷,來知道其編碼方式,,如果都不行,,那就是二進制了,。

另外還有一種方式,BOM,,Windows就是使用BOM來標記文本文件的編碼方式的操作系統(tǒng),。什么是BOM, 標準 FAQ 中對此問題有一個專門的描述:http://www./International/questions/qa-utf8-bom,,具體如下:

在UCS 編碼中有一個叫做”ZERO WIDTH NO-BREAK SPACE”的字符,,它的編碼是FEFF。而FFFE在UCS中是不存在的字符,,所以不應該出現(xiàn)在實際傳輸中,。UCS規(guī)范建議我們在傳輸字節(jié)流前,先傳輸 字符”ZERO WIDTH NO-BREAK SPACE”,。這樣如果接收者收到FEFF,,就表明這個字節(jié)流是Big-Endian的;如果收到FFFE,,就表明這個字節(jié)流是Little- Endian的,。因此字符”ZERO WIDTH NO-BREAK SPACE”又被稱作BOM。

UTF-8不需要BOM來表明字節(jié)順序,,但可以用BOM來表明編碼方式,。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8編碼是EF BB BF。所以如果接收者收到以EF BB BF開頭的字節(jié)流,,就知道這是UTF-8編碼了,。

各種系統(tǒng)、工具,,對于BOM處理也不一樣:

  • notepad:可以自動識別出沒有帶 bom的 utf-8 編碼格式文件,,但不可以控制保存文件時是否添加 bom , 如果保存文件,,那么會統(tǒng)一添加 bom ,;
  • editplus:不能自動識別出沒有 bom 的 utf-8 編碼格式文件,文件保存時,,選擇UTF-8 格式,,不會在文件頭寫上 BOM header;
  • UltraEdit : 對于字符編碼的功能最為強大,, 可以自動識別帶 bom 和不帶 bom 的 utf-8 文件(可以配置) ,; 保存的時候可以通過配置選擇是否添加 bom;
  • Notepad ++ :對于 utf-8 bom 支持比較好,;
  • Dreamweaver:可以配置參數(shù),,使新建文件時不寫入BOM,具體如下:選擇 編輯->首選參數(shù),打開后點擊左邊”新建文檔” 這里有個”包括Unicode 簽名(BOM)” 前面的對鉤去掉即可,;
  • perl中輸出print OUT “\x{feff}”;
  • PHP可以對BOM無視,;
  •  ie 載入 utf-8 格式的文件如果不帶 bom ,則會有奇異問題(緩存情況下的動態(tài)加載報錯)【沒有驗證】
  • 做不同格式轉換時,,最好檢測是否有bom,,將其去掉,再進行轉換,,否則就會看到“锘”開頭的亂碼

還有什么,?

  • Unicode是將來的趨勢,,各種編程語言,、系統(tǒng)、工具都以支持Unicode為其特性,;
  • DOS不支持UTF-8,,UTF-8腳本的調試,是一件煩人的事情,,或者不要用中文,;
  • 為什么要知道這些?

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多