字符編碼小評
字節(Byte)
字節是通過網絡傳輸信息(或在硬盤或內存中存儲信息)的單位。
1個字節等于8位二進制 : 1 Byte = 8 bit (比特)或這樣理解:1字節(Byte)= 8位(bit)1千字節(KB,Kilobyte)=1024字節(2的10次方字節)( 1KB = 1024 B )
字符
人們使用的記號,抽象意義上的一個符號。 '1', '中', 'a', '$', '¥', ……
字節 計算機中存儲數據的單元,一個8位的二進制數,是一個很具體的存儲空間。0x01, 0x45, 0xFA, ……英文一個字母是一字節。中國字比較復雜,1字節=8位,8位從0000 0000到1111 1111,即2的8次方只能表示256個字符,2個字節是2*8=16位,從0000 0000 0000 0000 到 1111 1111 1111 1111可以表示65535個字符。
編碼方式
Unicode 和 ANSI 是兩種常見的編碼方式。
ANSI 編碼方式
在 ANSI 編碼的定義中,存在不同的字符集(Charset)的概念。
同樣的字節序列,在不同的字符集下表示的字符不一樣。 要正確解析一個ANSI字符串,還要選擇正確的字符集,否則就可能導致所謂的亂碼現象。
不同語言版本的操作系統(如日文版Window7、韓文版Windows7等),都有一個默認的字符集。在不指定字符集的情況下,系統會使用此字符集來解析 ANSI 字符串。也就是說,如果我們在簡體中文版的Windows下打開了一個由日文操作系統保存的 ANSI 文本文件(僅包含 ANSI 字符串的文本文件),我們看到的將是亂碼。
ANSI 字符串 :在一個字符串中,可以用一個字節也可以用2個字節。 在內存中,如果“字符”是以ANSI編碼形式存在的,一個字符可能使用 一個字節或多個字節 來表示,那么我們 稱這種字符串為 ANSI 字符串或者多字節字符串。如,"中文123" (占7字節)。
Unicode 編碼方式
在 Unicode 編碼的定義中不存在字符集的概念。
字符串 在內存中,如果“字符”是以在Unicode中的序號存在的,那么我們稱這種字符串為Unicode字符串或者 寬字節字符串 。 在Unicode中,每個字符都 占兩個字節 。如,"中文123"(占10字節)。Unicode和ANSI的區別就相當于輸入法內的“全角” 和 “半角”的區別。
由于不同 ANSI 編碼所規定的標準是不相同的(字符集不同),因此,對于一個給定的多字節字符串,我們必須知道它采用 的是哪一種字符集則,才能夠知道它包含了哪些“字符”。而對于 Unicode 字符串來說,不管在什么環境下,它所代表的“字符”內容總是不變的。Unicode 有著統一的標準,它定義了世界上絕大多數的字符的編碼,使得拉丁文、數字、簡體中文、繁體中文、 日文都能一同一種編碼方式保存。
字符集
字符集英文:Charset。
每個字符集都有一個唯一的編號,稱為代碼頁(Code Page)。簡體中文(GB2312)的代碼頁為936,而系統默認字符集的代碼頁為0,它表示根據系統的語言設置來選擇一個合適的字符集。
本文由用戶 Yangcl 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!