字符編碼

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

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

亂碼事例
亂碼事例

「天吶务蝠,文字內(nèi)容看不懂,我打開(kāi)是什么烛缔!」
「內(nèi)容沒(méi)法正常顯示馏段,多半是字符編碼的鍋〖桑」

此現(xiàn)象稱為「亂碼」院喜,日語(yǔ)稱為文字化け,英語(yǔ)稱為 Mojibake(音譯自日語(yǔ))晕翠∨缫ǎ「亂碼」改變的不僅僅是字形,連字符個(gè)數(shù)都將受影響淋肾;不光會(huì)大大影響閱讀硫麻,而且會(huì)在 web 上使你生產(chǎn)的內(nèi)容無(wú)法被搜索引擎識(shí)別。無(wú)論作為閱覽者樊卓,還是生產(chǎn)者拿愧,亂碼都是我們需要避免的問(wèn)題。

什么是字符編碼

首先碌尔,還要先提另一個(gè)概念:「字符集」浇辜。

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

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

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

摘自于 Stackoverflow.

「字符集」就是字符的集合唾戚,而「字符編碼」是字符如何存儲(chǔ)在計(jì)算機(jī)中的方式柳洋。舉個(gè)例子,Unicode 就是「字符集」叹坦,而 UTF-8 則是「字符編碼」熊镣。

有很多種不同的字符編碼,不同的字符編碼定義字符的方式也不一樣。例如每臺(tái)計(jì)算機(jī)都帶有的 ASCII 編碼绪囱,大陸常用的 GB2312, GB18030测蹲、臺(tái)灣常用的 BIG5,以及未來(lái)趨勢(shì) UTF-8毕箍。

UTF-8

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

如此龐大的字符膝迎,如何為其編碼粥帚?Unicode 定制時(shí),計(jì)算機(jī)存儲(chǔ)器容量也大大增長(zhǎng)了限次。Unicode 采用 16 位表示一個(gè)字符芒涡,對(duì)于 ASCII 與其擴(kuò)展保持不變,剩下高位用 0 填滿卖漫。其他語(yǔ)言重新編碼费尽。然后新的問(wèn)題來(lái)了:

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

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

  • 如果一個(gè)字節(jié)的第一位為 0突委,那么代表當(dāng)前字符為單字節(jié)字符速警,占用一個(gè)字節(jié)的空間。0 之后的所有部分(7 個(gè) bit)代表在 Unicode 中的序號(hào)鸯两。
  • 如果一個(gè)字節(jié)以 110 開(kāi)頭闷旧,那么代表當(dāng)前字符為雙字節(jié)字符,占用 2 個(gè)字節(jié)的空間钧唐。110 之后的所有部分(5 個(gè) bit)加上后一個(gè)字節(jié)的除 10 外的部分(6 個(gè) bit)代表在 Unicode 中的序號(hào)忙灼。且第二個(gè)字節(jié)以 10 開(kāi)頭
  • 如果一個(gè)字節(jié)以 1110 開(kāi)頭,那么代表當(dāng)前字符為三字節(jié)字符,占用 2 個(gè)字節(jié)的空間该园。110 之后的所有部分(5 個(gè) bit)加上后兩個(gè)字節(jié)的除 10 外的部分(12 個(gè) bit)代表在 Unicode 中的序號(hào)酸舍。且第二、第三個(gè)字節(jié)以 10 開(kāi)頭
  • 如果一個(gè)字節(jié)以 10 開(kāi)頭里初,那么代表當(dāng)前字節(jié)為多字節(jié)字符的第二個(gè)字節(jié)啃勉。10 之后的所有部分(6 個(gè) bit)和之前的部分一同組成在 Unicode 中的序號(hào)。

如何查找某個(gè)字符的編碼双妨?

macOS 自帶的表情與符號(hào)可以找到字符在不同編碼方式下的碼位淮阐。

表情與符號(hào)
表情與符號(hào)

reference

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刁品,隨后出現(xiàn)的幾起案子泣特,更是在濱河造成了極大的恐慌,老刑警劉巖挑随,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件状您,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兜挨,警方通過(guò)查閱死者的電腦和手機(jī)膏孟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拌汇,“玉大人骆莹,你說(shuō)我怎么就攤上這事〉C停” “怎么了幕垦?”我有些...
    開(kāi)封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)傅联。 經(jīng)常有香客問(wèn)我先改,道長(zhǎng),這世上最難降的妖魔是什么蒸走? 我笑而不...
    開(kāi)封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任仇奶,我火速辦了婚禮,結(jié)果婚禮上比驻,老公的妹妹穿的比我還像新娘该溯。我一直安慰自己,他們只是感情好别惦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布狈茉。 她就那樣靜靜地躺著,像睡著了一般掸掸。 火紅的嫁衣襯著肌膚如雪氯庆。 梳的紋絲不亂的頭發(fā)上蹭秋,一...
    開(kāi)封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音堤撵,去河邊找鬼仁讨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛实昨,可吹牛的內(nèi)容都是我干的洞豁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荒给,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丈挟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起锐墙,我...
    開(kāi)封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤礁哄,失蹤者是張志新(化名)和其女友劉穎长酗,沒(méi)想到半個(gè)月后溪北,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夺脾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年之拨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咧叭。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚀乔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菲茬,到底是詐尸還是另有隱情吉挣,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布婉弹,位于F島的核電站睬魂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏镀赌。R本人自食惡果不足惜氯哮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望商佛。 院中可真熱鬧喉钢,春花似錦、人聲如沸良姆。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)玛追。三九已至舔痕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伯复。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工慨代, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啸如。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓侍匙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親叮雳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子想暗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一、亂碼 首先帘不,所有信息在計(jì)算機(jī)上都是以二進(jìn)制形式存儲(chǔ)说莫。而當(dāng)出現(xiàn)亂碼的時(shí)候往往是將這些信息以字符的形式表現(xiàn)之后。這...
    假鞋子閱讀 1,333評(píng)論 0 0
  • 亂碼 亂碼是怎么出現(xiàn)的呢寞焙?對(duì)同一組二進(jìn)制數(shù)據(jù)储狭,不同的編碼會(huì)解析出不同的字符,用對(duì)了編碼捣郊,解析出來(lái)的字符組成的文字是...
    __Jasmine__閱讀 615評(píng)論 0 0
  • ** 本文轉(zhuǎn)載自 CENALULU`S TECH BLOG辽狈,學(xué)習(xí)使用,侵刪呛牲。 * 本文將簡(jiǎn)述字符集刮萌,字符編碼的概念...
    王康_Wang閱讀 310評(píng)論 0 0
  • 不堵車的時(shí)候可以哼著小曲,放著動(dòng)感DJ娘扩,狂野的行駛著着茸,不知堵車為何物。 堵車的時(shí)候堵到想脫口大罵琐旁,耽誤時(shí)間不說(shuō)涮阔,還...
    孫圳pm閱讀 1,141評(píng)論 3 2
  • 我堂哥總覺(jué)得我是個(gè)苦逼孩子。 這事是沒(méi)法解釋的旋膳,即使我說(shuō)我有正常的文娛生活澎语,偶爾旅行吹吹海風(fēng),一個(gè)人陪狗在屋子里打...
    越女事務(wù)所閱讀 293評(píng)論 0 0