1. 程式人生 > >關於 charset 的幾種編碼方式

關於 charset 的幾種編碼方式

經常遇到charset=gb2312、charset=iso-8859-1、charset=utf-8這幾種編碼方式,它們有什麼不同,看下面的圖

編碼方式 含義
charset=iso-8859-1 西歐的編碼,英文編碼
charset=gb2312 中文編碼
charset=utf-8 世界通用語言編碼
charset=big5 繁體中文編碼
charset=euc-kr 韓文編碼

除此之外,還有很多其他的編碼方式,其中charset=utf-8可以用到中文、韓文、日文等世界上所有語言編碼上

各個國家和地區制定的不同ANSI

編碼標準中,都只規定了自己語言需要的“字元”,比如漢字標準(GB2312)中沒有規定韓文字元怎麼儲存。制定的ANSI包含兩層含義:

字符集:使用哪些字元,也就是哪些漢字、字母和符號會被收入標準中。

編碼:規定每個字元如何儲存,即用幾個位元組以及哪些位元組來儲存

在制定ANSI標準的時候,字符集編碼一般都是同時制定的。

“unicode”字符集包含了各種語言使用到的“字元”。由此產生了很多“unicode”字符集編碼的標準,主要分為下面三類。

  • ISO-8859-1

    最簡單的編碼規則,每一個位元組直接作為一個unicode字元。比如,[0xD6, 0xD0] 這兩個位元組,通過 iso-8859-1

    轉化為字串時,將直接得到 [0x00D6, 0x00D0] 兩個 unicode 字元,即 “ÖД。 反之,將 unicode 字串通過 iso-8859-1 轉化為位元組串時,只能正常轉化 0~255 範圍的字元。

  • GB2312、BIG5、Shift_JIS、ISO-8859-2

    unicode 字串通過 ANSI 編碼轉化為“位元組串”時,根據各自編碼的規定,一個 unicode 字元可能轉化成一個位元組或多個位元組。 反之,將unicode位元組串轉化成字串時,也可能多個位元組轉化成一個字元。比如,[0xD6, 0xD0] 這兩個位元組,通過 GB2312 轉化為字串時,將得到 [0x4E2D] 一個字元,即 ‘中’ 字。

    ANSI 編碼”的特點:

    1. 這些“ANSI 編碼標準”都只能處理各自語言範圍之內的 unicode 字元。
    2. unicode 字元”與“轉換出來的位元組”之間的關係是人為規定的。
  • UTF-8,UTF-16,UnicodeBig

    與“ANSI 編碼”類似的,把字串通過 unicode 編碼轉化成“位元組串”時,一個 unicode 字元可能轉化成一個位元組或多個位元組。

    與“ANSI 編碼”不同的是:

    1. 這些“unicode 編碼”能夠處理所有的 unicode 字元。
    2. unicode 字元”與“轉換出來的位元組”之間是可以通過計算得到的。

文章來源