欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
編碼歪傳

子曰:亂碼是一種思念,而思念是一種病。相信很多Web人常常糾結于亂碼當中,可能是展現、可能是表單提交、可能是數據庫、可能是接口、可能是抓取……反正任何一個(gè)涉及到輸入或者輸出字符的地方都有可能被你碰到過(guò)亂碼。

為了解釋和解決亂碼問(wèn)題,并且明確一些常見(jiàn)的誤區,我打算寫(xiě)這樣一個(gè)系列,介紹一些字符編碼相關(guān)的東西,目前規劃了3篇。

基本上內容會(huì )比較偏科普性質(zhì),希望大神們輕拍,因為我相信這些將會(huì )是非常重要的基礎知識,如果你能完整的讀下去,肯定會(huì )在你以后遇到亂碼的時(shí)候幫助到你的思考方式,快速找到原因。

字符

我們的語(yǔ)言基本上都圍繞著(zhù)字符,就是character,常簡(jiǎn)稱(chēng)char,很多時(shí)候字符會(huì )是文本的最小組成單位(注意只是“很多時(shí)候”,因為世界是奇妙的)。

不是一定要文字才叫字符,一些注音字符、數學(xué)符號、某些文字里的修飾符號、特殊符號、表格符號、甚至Emoji等等,其實(shí)都是字符。

字符集

字符要成套才有用,比如“英文字母”就是一個(gè)字符集,當然這么說(shuō)聽(tīng)起來(lái)對計算機毫無(wú)意義。

一般我們所說(shuō)的字符集(Character Set)就是一個(gè)規范,它收錄若干字符,并且給這些字符逐一分配了一個(gè)編號當作索引(為了不過(guò)早引入編碼的概念造成混淆,這里我稱(chēng)其為“編號”)。

ASCII

ASCII是當今計算機世界最經(jīng)典的字符集,它收錄了英文字母和若干標點(diǎn),還有一些專(zhuān)門(mén)供計算機使用(不是給人看)的控制字符。

GB系列

GB2312是一個(gè)常見(jiàn)的中文字符集,其中“GB”就是“國標”(咱們國家很多不同行業(yè)的標準代號都是這樣命名的)。它收錄了大概幾千個(gè)漢字,以及幾百個(gè)西文字符。

GBK是微軟最早在Win95里實(shí)現的對GB2312進(jìn)行的擴展,追加了很多繁體字和西文字符,總計收錄的字符數大概有20000多個(gè)。K就是拼音“擴展”。

GB18030是國標對GB2312的升級(當然中間還有其他升級,但大多被淹沒(méi)在歷史潮流里面了),它一下就收錄了70000多個(gè)字符,最大的升級部分有繁體中文字符、新字、生僻字、少數民族文字、日韓字符等。

上面三個(gè)GB系列的字符集都是為中文設計的,當然也擴充了一些東亞語(yǔ)文的內容(CJK字符,Chinese, Japanese, Korean),因為這些鄰居的字符在中國也挺常出現的。

Big5

又稱(chēng)大五碼,是繁體中文地區,例如灣灣、港港、澳澳常用的字符集,大概收錄了一萬(wàn)多個(gè)字符,其中以繁體中文為主。因為被Windows所接受成為繁中版的默認編碼而成為了事實(shí)標準。

UCS

就像中文一樣,幾乎每種語(yǔ)言都存在一個(gè)給自己的語(yǔ)言設計字符集的問(wèn)題。

ISO意識到這個(gè)問(wèn)題之后,設計了一套通用字符集UCS(Universal Character Set),目的是用一套字符集表示全世界(甚至外星人???)的所有字符!

結果UCS成功了,因為互聯(lián)網(wǎng)發(fā)展的太快了,任何國家的人每天都在互聯(lián)網(wǎng)上瀏覽來(lái)自全世界的不同語(yǔ)言不同文字的內容,大家當然希望用一套字符集就能收錄全世界所有的字符。

字符編碼

很多人會(huì )把字符集字符編碼的概念搞混,其實(shí)不怪,因為這倆東西好多時(shí)候都是捆綁定義的。

字符編碼(Character Encoding)就是按照一定的技術(shù)要求(比如以8bit為單位)對字符集中的每一個(gè)字符進(jìn)行編碼,以便文本能夠在計算機和網(wǎng)絡(luò )傳輸上使用。

簡(jiǎn)單的說(shuō),就是把字符集里面的那個(gè)每個(gè)字符的編號,給弄成計算機能懂的格式。

很多字符集在制定的時(shí)候,就已經(jīng)配套了它的編碼方案,比如ASCII、GB系列、Big5。對于這種字符集/編碼,稱(chēng)呼上雖然模糊,但結合技術(shù)語(yǔ)境而言一般也不會(huì )有什么誤解。

ASCII

標準ASCII只收錄了128個(gè)字符,使用7bit可以完美編碼。例如英文字母A的ASCII編碼就是十六進(jìn)制0x41,然后1字節剩下的一位就沒(méi)啥用了,可以用來(lái)當奇偶校驗。

后來(lái)ASCII被擴展到了8bit,供256個(gè)字符,用8bit也就是1字節可以完美編碼,并且低7字節完全兼容。

ASCII是國際標準而擴展ASCII并不是,下文所說(shuō)到的“兼容ASCII”都是指兼容7bit的標準ASCII。

GB2312

GB2312使用1/2字節變長(cháng)編碼,單字節部分是兼容ASCII,其他幾千個(gè)字符都是用雙字節編碼。

GB2312在編碼的時(shí)候使用了一個(gè)“分區”的概念,小時(shí)候家里有一本區位碼表,就是配合Windows里古老的“區位輸入法”用的。

GBK

GBK的編碼方案是GB2312的超集,它完全兼容GB2312,不過(guò)把GB2312里面沒(méi)定義的那些編碼空間都用起來(lái)了。

GB18030

GB18030的編碼方案稍微復雜一點(diǎn),它用的是1/2/4字節變長(cháng)編碼方案。它完全兼容GB2312,基本上兼容GBK。

Big5

Big5使用固定兩字節編碼,它的首字節避開(kāi)了ASCII的范圍,因此實(shí)際在程序實(shí)現上面它可以近似兼容ASCII,由于它的低字節包含了一些ASCII字符,這個(gè)兼容也是不完美的,具體情況可以看看維基百科,非常有趣。

Unicode

Unicode有一個(gè)非常高大上的中文名字叫萬(wàn)國碼,呵呵,這個(gè)名字真是散發(fā)著(zhù)一股農業(yè)重金屬的氣息啊。其實(shí)也是個(gè)字符集,它和UCS之間有微妙的高度雷同關(guān)系,好在兩邊的組織都意識到了搞分化是不好的,于是互相之間達成了高度的一致。雖然它們的確是兩個(gè)不同的標準,但很多時(shí)候混淆來(lái)看也無(wú)妨。

Unicode是定長(cháng)編碼,根據版本不同,它有2字節(對應UCS-2)、4字節(對應UCS-4)的版本。

因為Unicode是定長(cháng)的,它實(shí)在太簡(jiǎn)單粗暴了。例如如果用4字節的Unicode來(lái)傳輸英文文本就浪費了3倍的體積,而用2字節的版本也不爽,一來(lái)容量較小,二來(lái)對于英文文本也還是浪費的。于是在實(shí)現上對它進(jìn)行了一定的優(yōu)化,稱(chēng)為Unicode轉換格式(Unicode Transformation Format)也就是我們耳熟能詳的UTF了。

UTF-32

UTF-32是UCS-4的最樸素的實(shí)現方式,就是簡(jiǎn)單地用定長(cháng)4字節。

缺點(diǎn)嘛很明顯就是很浪費體積。

優(yōu)點(diǎn)也是有的,首先就是把它轉換到Unicode最簡(jiǎn)單,而且對于“第[i]個(gè)字符”這種隨機訪(fǎng)問(wèn)也很好計算,直接字節數/4就是了對不?

但因為組合字符(比如越南語(yǔ),網(wǎng)上用來(lái)搞一個(gè)超長(cháng)的流淚圖標破壞排版那種)的存在,一個(gè)UTF-32碼元(4字節)嚴格上也并非一個(gè)文本編輯上的單元,這種情況下對于排版系統而言UTF-32沒(méi)有太多優(yōu)勢。

UTF-16

UTF-16是使用2/4字節實(shí)現的UCS-4變長(cháng)編碼。

因為大多數時(shí)候用到的字符不超過(guò)65536個(gè),所以UTF-16在大多數時(shí)候1個(gè)字符都只占2字節,這樣比起UTF-32省了接近一半體積,同時(shí)它的解析也不會(huì )太麻煩。

固定長(cháng)的編碼方式對于計算機程序而言有一個(gè)非常大的優(yōu)勢就是字符串處理會(huì )容易的多,尤其是正則表達式的實(shí)現。因此很多現代語(yǔ)言,例如C#/Java的字符串內部實(shí)現使用UTF-16,因為它是一種效率和體積比較平衡的編碼方式。

UTF-8

UTF-8應該是現在互聯(lián)網(wǎng)上使用最廣泛的統一語(yǔ)言編碼實(shí)現方式了。

它是1-4字節變長(cháng)編碼(原本是1-6字節,但是因為后面那些超出了Unicode定義了,后來(lái)就改成1-4字節了)。單字節的情況兼容ASCII,在這個(gè)由英文主宰的互聯(lián)網(wǎng)環(huán)境里面這是非常好的特性,因為它在很多時(shí)候會(huì )非常節省體積,而且這種時(shí)候完全不需要編碼轉換。

但它的缺點(diǎn)也相當明顯,將UTF-8轉換到Unicode的算法會(huì )更加復雜,效率降低。

對于中文環(huán)境而言UTF-8也比較吃虧,因為使用UTF-8編碼大多數中文字符需要3字節,這就比GB系列和UTF-16浪費空間。

UTF-8并未編碼0x10FFFF以上的部分,所以嚴格的說(shuō)它只是UCS-4的子集。好在缺失的那部分本身就不受UCS/Unicode的重視,估計實(shí)在是太犄角旮旯了。

我覺(jué)得UTF-8最終成為互聯(lián)網(wǎng)主流很大一定程度是因為它的單字節是兼容ASCII的。

階段性小結

字符集

收錄了很多字符,并且編號,給人看的。

編碼

實(shí)現一個(gè)字符集,將它的編號以一定規則用二進(jìn)制實(shí)現,給計算機看的。

GB系列

中國的國標字符集/編碼,GB2312和GBK已經(jīng)基本上過(guò)時(shí)了,如果要良好的支持中日韓文,又逃不開(kāi)GBK的魔爪(比如歷史代碼束縛),那可以考慮升級到GB18030,這是國標的最新版,也是最先進(jìn)的一版。

UCS/Unicode

把全世界上百萬(wàn)個(gè)你見(jiàn)過(guò)的或者你沒(méi)見(jiàn)過(guò)的字符全部收錄進(jìn)一套字符集,已經(jīng)被全世界接受成為了國際標準。

UTF

UCS/Unicode轉換格式,就是實(shí)用的編碼方案,用于計算機實(shí)現。

UTF-16

UCS/Unicode的一種折衷了處理效率和存儲空間的編碼實(shí)現方案,常被各種現代語(yǔ)言當作字符串內部編碼使用。

UTF-8

UCS/Unicode的一種傾向于節省空間的編碼實(shí)現方案,因為對ASCII兼容,對英文文本非常有利,成為了當今互聯(lián)網(wǎng)的主流(甚至事實(shí)標準)。

如果你的網(wǎng)站沒(méi)有任何歷史包袱,直接上UTF-8別商量!

如果你的網(wǎng)站有一些歷史包袱,商量商量還是上UTF-8吧,包袱的接口上轉換一下編碼。

預報

呵呵呵呵,雖然文章的標題叫做《編碼歪傳》,但其實(shí)上面的內容一點(diǎn)也不歪嘛。

有觀(guān)眾看不下去了:“拜托,你講這些什么亂七八糟的理論知識我沒(méi)啥興趣啊,我想知道的其實(shí)只是為什么我的網(wǎng)頁(yè)會(huì )亂碼啊老濕!”

對于上面的問(wèn)題我只想說(shuō)四個(gè)字:請聯(lián)系我請看下集:《編碼歪傳——Web篇》

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ASCII, GB2312, Unicode , UTF-8 - 靈感點(diǎn)滴
深入分析Oracle字符集(轉載)
編碼匯總整理
關(guān)于字符編碼,你所需要知道的
struts原理與實(shí)踐(4)
java 字符編碼處理
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久