字符窘俺,字符集,字符編碼复凳,編碼頁瘤泪,字體

吾國碼農(nóng)應(yīng)該都遇到過亂碼的問題,然后網(wǎng)上搜索一番添加一些設(shè)置染坯,亂碼就消失了均芽,也不繼續(xù)追究本質(zhì)。
本文試圖講清楚標題提到的概念单鹿,從此遇到亂碼從容應(yīng)對掀宋。

字符(character),就是【a】,【A】,【請】等書寫符號仲锄。
字符集(character set)劲妙,通常就是某種語言字符集合,比如英語就是ascll字符集儒喊,中文有GBK等

注意镣奋,不是每種語言只對應(yīng)一種字符集(比如GB2312 ,GBK怀愧,GB18030都包含了常用漢字侨颈,后者是前者的超集),而且字符集也不是只對應(yīng)一種語言芯义,例如Unicode字符集就包含所有語言字符,字符集只是設(shè)計者為了給字符編碼(Code Point/Numbering)設(shè)計編碼時哈垢,為了收錄到命名的字符集合,但是通常設(shè)計者都為字符集設(shè)計了對應(yīng)的編碼規(guī)范扛拨。

字符編碼(character code point),給字符集里的字符編號
編碼頁(code page)耘分,在unicode發(fā)明之前,各個地區(qū)都用2字節(jié)編碼自己的字符集,相同的編碼對應(yīng)不同的字符求泰,為了本地化央渣,windows發(fā)明了編碼頁,來對應(yīng)不同的字符集渴频。
字符編碼(character encoding)芽丹,對給定的字符編碼(code point)編碼成字節(jié)表示(byte sequence)

早期,字符被編號后枉氮,存儲時就按照編號的方式存儲志衍,沒有encoding的過程,后來發(fā)明Unicode后聊替,發(fā)現(xiàn)如果按照Unicode的編號直接存儲的話楼肪,對于英文字符就有很大存儲浪費,因為任意字符都需要2字節(jié)存儲惹悄,后來人們發(fā)明UTF-8這種編碼方式春叫,這樣UTF-8就可以一個字節(jié)表示英文字符,2個以上字節(jié)表示漢字字符泣港。

字體(Font)暂殖,定義了字符的圖形表示,現(xiàn)在的軟件展示字符時用Unicode表示当纱,字體是Unicode編碼和字符圖形的映射呛每,而以往比如WindowsCMD控制臺,沒有對應(yīng)Unicode坡氯,則用編碼頁來區(qū)分晨横,所以字體就是字符編碼金和代碼頁到字符圖形的映射。

相同字符的不同字體箫柳,顯示圖形不一樣手形。字體通常與具體的字符集相關(guān),因為字體是針對某一字符集設(shè)計的悯恍。如果用表示日語的字體顯示中文库糠,就會發(fā)現(xiàn)不一致,中日都有的漢字正常顯示涮毫,日文沒有的漢字瞬欧,就有點怪(其實是編輯器嘗試用其他字體顯示的原因)。另外可以看出罢防,字體與具體編碼無關(guān)黍判,不同編碼的同一字符,用相同字體顯示是一樣的圖形篙梢。只是字符集通常與字符編碼用相同的名稱表示,容易混淆美旧,比如GB2312,即是字符集渤滞,又是字符編碼贬墩。

好了,現(xiàn)在我們可以想象妄呕,文本文件存儲在磁盤上陶舞,都是一系列的bytes,如果不告訴文本編輯器該文件的encoding绪励,編輯器會嘗試用默認的編碼(依賴于操作系統(tǒng)設(shè)置)又或者自己探測(detect肿孵,比如文件開頭有FFEF或者EFFF字節(jié)就表明UTF-16編碼,有很多10疏魏,110開頭的字節(jié)停做,很可能是UTF-8編碼)并嘗試decode,如果沒有猜對大莫,那就會顯示亂碼蛉腌。

下面我們通過文本編寫,保存/傳輸以及瀏覽器顯示來了解一下亂碼可能的原因以及解決辦法只厘。
我們用輸入法在notepad輸入文字烙丛,輸入法首先產(chǎn)生Unicode編碼在內(nèi)存,當我們保存時編輯器首先嘗試用系統(tǒng)默認的編碼保存羔味,當我們輸入的字符不包含在本地編碼對應(yīng)的字符集時河咽,就會收到類似提示:文本包含Unicode字符,如果繼續(xù)保存則丟失信息赋元,請選擇unicode方案保存忘蟹。此時一定要選擇unicode方案保存,否則信息丟失就回天無力们陆。
好了寒瓦,接下來我們要傳輸文本到瀏覽器,一般我們只是簡單的傳輸文件(2進制流傳輸)而不對文件進行轉(zhuǎn)碼坪仇,但是瀏覽器不知道文件的編碼就有可能顯示亂碼杂腰,所以我們需要通過http頭的Content-Type: text/plain; charset=”UTF-8″來告訴瀏覽器用正確的編碼來解析。所以如果瀏覽器顯示亂碼椅文,就有一下幾種可能
1喂很,沒有content-type頭,瀏覽器默認的編碼與實際不同皆刺,嘗試調(diào)整瀏覽器編碼可以解決
2少辣,有content-type頭,但是與實際文件編碼不同羡蛾,重新制定content-type頭漓帅,或者傳送文件內(nèi)容之前對文件按照content-type頭制定的編碼進行轉(zhuǎn)碼在傳輸。
3,content-type和文件內(nèi)容都正確忙干,還是亂碼器予,瀏覽器端根本安裝沒有對應(yīng)的字符集,安裝相應(yīng)的語言(同時會安裝相應(yīng)的字符集捐迫,編碼乾翔,字體等)。

參考
https://www.w3.org/International/questions/qa-what-is-encoding
https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
https://wenku.baidu.com/view/cb9fe505cc17552707220865.html
https://blogs.msdn.microsoft.com/shawnste/2005/03/15/whats-the-difference-between-an-encoding-code-page-character-set-and-unicode/
https://www.zhihu.com/question/21721472

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末施戴,一起剝皮案震驚了整個濱河市反浓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赞哗,老刑警劉巖雷则,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異懈玻,居然都是意外死亡巧婶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門涂乌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艺栈,“玉大人,你說我怎么就攤上這事湾盒∈遥” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵罚勾,是天一觀的道長毅人。 經(jīng)常有香客問我,道長尖殃,這世上最難降的妖魔是什么丈莺? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮送丰,結(jié)果婚禮上缔俄,老公的妹妹穿的比我還像新娘。我一直安慰自己器躏,他們只是感情好俐载,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著登失,像睡著了一般遏佣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揽浙,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天状婶,我揣著相機與錄音意敛,去河邊找鬼。 笑死太抓,一個胖子當著我的面吹牛空闲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播走敌,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逗噩!你這毒婦竟也來了掉丽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤异雁,失蹤者是張志新(化名)和其女友劉穎捶障,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纲刀,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡项炼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了示绊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锭部。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖面褐,靈堂內(nèi)的尸體忽然破棺而出拌禾,到底是詐尸還是另有隱情,我是刑警寧澤展哭,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布湃窍,位于F島的核電站,受9級特大地震影響匪傍,放射性物質(zhì)發(fā)生泄漏您市。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一役衡、第九天 我趴在偏房一處隱蔽的房頂上張望茵休。 院中可真熱鬧,春花似錦映挂、人聲如沸泽篮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帽撑。三九已至,卻和暖如春鞍时,著一層夾襖步出監(jiān)牢的瞬間亏拉,已是汗流浹背扣蜻。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留及塘,地道東北人莽使。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像笙僚,于是被迫代替她去往敵國和親芳肌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

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