字符編碼

為什么要關(guān)心字符編碼?

有時我們?yōu)g覽網(wǎng)頁,或者使用 Windows 自帶的記事本查看包含非基礎拉丁字符的文件時,會看到類似的現(xiàn)象:

亂碼事例
亂碼事例

「天吶,文字內(nèi)容看不懂,我打開是什么!」
「內(nèi)容沒法正常顯示,多半是字符編碼的鍋?!?/p>

此現(xiàn)象稱為「亂碼」,日語稱為文字化け,英語稱為 Mojibake(音譯自日語)?!竵y碼」改變的不僅僅是字形,連字符個數(shù)都將受影響;不光會大大影響閱讀,而且會在 web 上使你生產(chǎn)的內(nèi)容無法被搜索引擎識別。無論作為閱覽者,還是生產(chǎn)者,亂碼都是我們需要避免的問題。

什么是字符編碼

首先,還要先提另一個概念:「字符集」。

「字符集」和「字符編碼」有什么關(guān)系嗎?

  1. Charset is the set of characters you can use.

  2. Encoding is the way these characters are store into memory.

摘自于 Stackoverflow.

「字符集」就是字符的集合,而「字符編碼」是字符如何存儲在計算機中的方式。舉個例子,Unicode 就是「字符集」,而 UTF-8 則是「字符編碼」。

有很多種不同的字符編碼,不同的字符編碼定義字符的方式也不一樣。例如每臺計算機都帶有的 ASCII 編碼,大陸常用的 GB2312, GB18030、臺灣常用的 BIG5,以及未來趨勢 UTF-8。

UTF-8

最常見的 ASCII 采用 7 位表示一個字符,共課表達 128 個字符,僅能顯示基本拉丁字符,對于其他語言完全不夠,更加別提字符數(shù)量巨大的 CJK 地區(qū)字符。不管是大陸的 GB18030 或 臺灣的 BIG5,雖然能滿足中文使用,依然面臨諸多不便,例如如果海外的計算機不內(nèi)置這些編碼,則無法閱覽相關(guān)內(nèi)容。所以,企圖包含人類所有字符的字符集出現(xiàn)了:Unicode。目前(2017-03-06)最新版本為 9.0。

如此龐大的字符,如何為其編碼?Unicode 定制時,計算機存儲器容量也大大增長了。Unicode 采用 16 位表示一個字符,對于 ASCII 與其擴展保持不變,剩下高位用 0 填滿。其他語言重新編碼。然后新的問題來了:

原本拉丁字符只要占 1 個字節(jié),現(xiàn)在卻要花更多的空間。

UTF-8 還好的解決了這個問題——采用變長編碼的方式。UTF-8 使用 1~4 個字節(jié)表示一個字符。這里引用他人的描述:

  • 如果一個字節(jié)的第一位為 0,那么代表當前字符為單字節(jié)字符,占用一個字節(jié)的空間。0 之后的所有部分(7 個 bit)代表在 Unicode 中的序號。
  • 如果一個字節(jié)以 110 開頭,那么代表當前字符為雙字節(jié)字符,占用 2 個字節(jié)的空間。110 之后的所有部分(5 個 bit)加上后一個字節(jié)的除 10 外的部分(6 個 bit)代表在 Unicode 中的序號。且第二個字節(jié)以 10 開頭
  • 如果一個字節(jié)以 1110 開頭,那么代表當前字符為三字節(jié)字符,占用 2 個字節(jié)的空間。110 之后的所有部分(5 個 bit)加上后兩個字節(jié)的除 10 外的部分(12 個 bit)代表在 Unicode 中的序號。且第二、第三個字節(jié)以 10 開頭
  • 如果一個字節(jié)以 10 開頭,那么代表當前字節(jié)為多字節(jié)字符的第二個字節(jié)。10 之后的所有部分(6 個 bit)和之前的部分一同組成在 Unicode 中的序號。

如何查找某個字符的編碼?

macOS 自帶的表情與符號可以找到字符在不同編碼方式下的碼位。

表情與符號
表情與符號

reference

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、亂碼 首先,所有信息在計算機上都是以二進制形式存儲。而當出現(xiàn)亂碼的時候往往是將這些信息以字符的形式表現(xiàn)之后。這...
    假鞋子閱讀 1,452評論 0 0
  • 亂碼 亂碼是怎么出現(xiàn)的呢?對同一組二進制數(shù)據(jù),不同的編碼會解析出不同的字符,用對了編碼,解析出來的字符組成的文字是...
    __Jasmine__閱讀 744評論 0 0
  • ** 本文轉(zhuǎn)載自 CENALULU`S TECH BLOG,學習使用,侵刪。 * 本文將簡述字符集,字符編碼的概念...
    王康_Wang閱讀 368評論 0 0
  • 不堵車的時候可以哼著小曲,放著動感DJ,狂野的行駛著,不知堵車為何物。 堵車的時候堵到想脫口大罵,耽誤時間不說,還...
    孫圳pm閱讀 1,213評論 3 2
  • 我堂哥總覺得我是個苦逼孩子。 這事是沒法解釋的,即使我說我有正常的文娛生活,偶爾旅行吹吹海風,一個人陪狗在屋子里打...
    越女事務所閱讀 335評論 0 0

友情鏈接更多精彩內(nèi)容