字符編碼

字符編碼

  • 計算機裏面只有數字,計算機軟件裏的一切都是用數字來表示的,屏幕上顯示的一個個字符也不例外。
  • 字符a對應數字97,字符b對應數字98等,這種字符與數字對應的編碼規則被稱爲ASCII(沒過標準信息交換碼)ASCII的最高bit位都爲0,也就是說這些數字都在0127之間。
  • 中國大陸將每一箇中文字符都用兩個字節的數字來表示,中文字符的每個字節的最高位bit都爲1,中國大陸爲每個中文字符制定的編碼規則稱爲GB2312(國標碼)。
  • GB2312的基礎上,對更多的中文字符(包括繁體)進行了編碼,新的編碼規則稱爲GBK
  • 在中國大陸使用的計算機系統上,GBKGB2312就被稱爲該系統的本地字符集。
  • “中國”的“中”字,在中國大陸的編碼是十六進制的D6D0,而在中國太歪的編碼是十六進制的A4A4,臺灣地區對中文字符集得編碼規則稱爲BIG5(大五碼)。
  • 在一個國家的本地化系統中出現的一個字符,通過電子郵件傳送到另一個國家的本地化系統中,看到的就不是那個原始字符了,而是另外那個國家的一個字符或亂碼。

Unicode編碼

  • ISO(國際標準化組織)將全球所有的符號進行了東一遍嗎,稱之爲Unicode編碼。
  • “中”這個符號,在全世界的任何角落始終對應的都是一個十六進制的4e2d
  • 如果所有的計算機系統都使用Unicode編碼,在中國大陸的本地化系統中顯示的“中”這個符號,發送到伊拉克的本地化系統中,顯示的仍然是“中”這個符號
  •  Unicode編碼的字符都佔用兩個字節的大小,對於ASCII碼所表示的字符,只是簡單的在ASCII碼原來佔用的一個字節前面,增加了所有bits0的字節。
  • Unicode只佔用兩個字節,在全世界範圍內所表示的字符個數不會超過216次方(65536),實際上,Unicode編碼中還保留了兩千多個數值沒有用於字符編碼。
  •  在相當長的一段時間內,本地化字符編碼將於Unicode編碼共存。
  •  Java中的字符使用的都是Unicode編碼,java在通過Unicode保證跨平臺特性的前提下,也支持本地平臺字符集。

UTF-8編碼

ASCII碼字符保持原樣,仍然只佔用一個字節,對於其他國家的字符,UTF-8使用兩個或三個字節來表示,使用UTF-8編碼的文件,通常都要用EF BB BF作爲文件開頭的三個字節數據。

優點:

    • 不出現內容爲0x00字節
    • 便於應用程序監測數據在傳輸過程中是否發生了錯誤
    • 直接處理使用ASCII碼得英文文檔

缺點:

  • 某些字符需要使用三個字節

UTF-16編碼

  • UTF-16編碼只愛Unicode基礎上進行了一些細節上的擴充,增加了對Unicode編碼沒有包括的那些字符的表示方式。
  • UTF-16Unicode的擴種並沒有影響Unicode編碼所包括的那些字符,只是增加了對Unicode編碼沒有包括的那些字符的表達方式,一個使用Unicode編碼的字符就是UTF-16格式的。
  • Unicode編碼將0xD800-0xDFFF區間的數值保留出來,UTF-16擴充的字符,佔用是個字節,前面連個字節的數值爲0xD800-0xD8FF之間,後面兩個字節的數值爲0xDC00-0xDFFF之間。
  • 爲什麼不讓前面和後面的兩個字節的數值都位於0xD800-0xDFFF之間呢?
  • 在不同的體系結構中,UTF-16編碼的Unicode字符在內存中的字節存儲循序是 不同的。
  • 對於0x1234這樣的一個雙字節數據,只用Little-EndianBig-Endian兩種方式在內存中存儲的格式
  • 如果文件以0xFE 0xFF這兩個字節開頭,則表明文本的其餘部分是Big-EcdianUTF-16編碼:如果文件以0xFF 0xFE這兩個字節開頭,則表明文本的其餘部分是Little-EndianUTF-16編碼。

字符編碼的操作體驗:我們可以使用UtriEdit分別查看

  • 查看中文字符的GB2312
  • 查看中文字符的UTF-8
  • 查看中文字符的Unicode
  • Widows記事本程序中用不同編碼的編碼格式存儲文本文件


發佈了25 篇原創文章 · 獲贊 21 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章