字符編碼筆記:ASCII,Unicode 和 UTF-8(理解)

  • 一、ASCII 碼
    • 美國製定的字符編碼規則,對英語字符與二進制位之間的關係作了統一規定。
    • 佔一個字節,8 位,最多可表示 2^8 = 256 種狀態(字符)
    • 實際共有 128 個字符,只佔用一個字節的後面 7 位。首位統一規定爲 0。
  • 二、非 ASCII 編碼
    • 其餘國家各自制定的編碼規則。映射本國字符和二進制之間的關係。
      • 適合本國字符數在256之內的國家。
    • 其餘國家(字符數 > 256),則有本身的編碼規則。好比中文的:GB2312
  • 三、Unicode
    • 容納世界上全部符號的符號集。每一個符號都有本身的二進制代碼。
    • 只是一個符號集,只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲。
      • 好比:英文字符所有可用 1 個字節表示,可是漢字可能須要 2 或 3 個字節。一種編碼格式所有都用2個或者3個字節表示會有浪費。因此該如何存儲呢?
  • 四、UTF-8
    • 一、概念:
      • 互聯網上使用最廣的一種 Unicode 的實現方式。(Unicode 也有其餘實現方式)
    • 二、特色:
      • 變長的編碼方式。它可使用 1~4 個字節表示一個符號,根據不一樣的符號而變化字節長度。
    • 三、編碼規則:
      • 1)對於單字節的符號,字節的第一位設爲 0,後面 7 位爲這個符號的 Unicode 碼。
        • 所以對於英語字母,UTF-8 編碼和 ASCII 碼是相同的。
      • 2)對於 n 字節的符號(n > 1),第一個字節的前 n 位都設爲 1,第 n + 1 位設爲 0,後面字節的前兩位一概設爲 10。
        • 剩下的沒有說起的二進制位,所有爲這個符號的 Unicode 碼。
    • 四、Unicode 和 UTF-8的對應關係()
      • 4.1 關係圖:
        • 圖:
        • 說明:
          • 總感受這個圖不理解,不過仍是作一些解讀和說明吧。
          • 第一行:
            • 字符最多佔7位(0-7位)
            • 因此:Unicode 符號範圍:0(十六進制:0)-111 1111(十六進制:7F)
          • 第二行:
            • 字符最多佔11位(8-11位)
            • Unicode 符號範圍:1000 0000(十六進制:80)-111 1111 1111(十六進制:7FF)
          • 第三行:
            • 字符最多佔16位(12-16位)
            • Unicode 符號範圍:1000 0000 0000(十六進制:800)-111 1111 1111(十六進制:7FF)
          • 第四行:
            • 字符最多佔21位
            • Unicode 符號範圍:同上
      • 4.2 轉換:
        • Unicode 和 UTF-8都用16位表示,須要從中提取出來具體的值,而後轉換。
        • Unicode 到 UTF-8 的轉換
          • 根據Unicode 的值,肯定其符號範圍對應的 UTF-8 是多少位。而後,高位補0填充。
        • UTF-8 提取 Unicode
          • 看其是多少位,提取相關的 Unicode 值。
  • 五、編碼存儲方式:Little endian 和 Big endian
    • 5.1 概念理解
      • 以漢字嚴爲例,Unicode 碼是 4E25,須要用兩個字節存儲,一個字節是 4E,另外一個字節是 25。
        • 存儲時,4E 在前,25 在後,這就是 Big endian 方式;
        • 25 在前,4E 在後,這是 Little endian 方式。
      • 即:通常文本都是從左往右的格式。
        • 若是編碼從左往右存:是 Big endian 方式(高位在前,FE FF 表示)
        • 若是編碼從右往左存:是 Little endian 方式(高位在後,FF FE 表示)
    • 5.2 區分:
      • Unicode 規範定義,每一個文件的最前面分別加入一個表示編碼順序的字符,這個字符的名字叫作 "零寬度非換行空格"(zero width no-break space),用 FEFF 表示。這正好是兩個字節,並且 FF 比 FE 大 1。
      • 若是一個文本文件的頭兩個字節是 FE FF,就表示該文件採用大頭方式(左小右大);
      • 若是頭兩個字節是 FF FE,就表示該文件採用小頭方式(左大右小)。
  • 六、參考:
相關文章
相關標籤/搜索