日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

程序员永远的痛之字符编码的奥秘

發(fā)布時(shí)間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员永远的痛之字符编码的奥秘 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ?字符編碼相信是每個(gè)程序員的噩夢(mèng),只要是有中文的地方,總是會(huì)遇到各種編碼的問(wèn)題,并且這種問(wèn)題還非常難纏,尤其在linux上,因?yàn)樯厦婧芏嘬浖际轻槍?duì) 英語(yǔ)國(guó)家開(kāi)發(fā)的,是不會(huì)考慮其他語(yǔ)種編碼問(wèn)題。在遇到編碼的無(wú)數(shù)大坑之后,我決定仔細(xì)研究下編碼問(wèn)題,因?yàn)檫@就像一道坎一直橫在你面前,每次到這里你都會(huì) 跌到,每次爬起來(lái)之后,你都若無(wú)其事,這樣的人被稱作戰(zhàn)士,真正的戰(zhàn)士。可惜是個(gè)力量戰(zhàn)士,做為新時(shí)代的智力戰(zhàn)士,當(dāng)然不能在那跌到然后又在這繼續(xù)跌到。

? ???文件的存儲(chǔ)方式: ? ? ?文件都有自己的存儲(chǔ)格式,比如最常見(jiàn)的txt,cpp,h,c,xml ,png, rmvb各種格式,還有自定義格式。這些文件不論是什么格式,都是存儲(chǔ)在計(jì)算機(jī)硬盤里的2進(jìn)制格存儲(chǔ),對(duì)應(yīng)不同文件格式,有不同的軟件解析。這篇文章不談 文件是如何存儲(chǔ)的,只談文件是如何解析的。 ? ???文本文件解析: ? ? ?文本文件對(duì)應(yīng)于人類可以閱讀的文本,如何從2進(jìn)制轉(zhuǎn)換為文本文件呢?起初由于計(jì)算機(jī)在美國(guó)發(fā)明,自然大家考慮的是英語(yǔ)如何表示,英語(yǔ)字母總共26個(gè),加 上特殊字符,128個(gè)字符,7位既一個(gè)byte即可表示出來(lái)。這個(gè)就是大家所熟知的ascill編碼。對(duì)應(yīng)關(guān)系很簡(jiǎn)單,一個(gè)字符對(duì)應(yīng)一一個(gè)byte。 ? ? ?但很快發(fā)現(xiàn),其他非英語(yǔ)國(guó)家的文字遠(yuǎn)遠(yuǎn)超過(guò)ascill碼,這時(shí)候大家當(dāng)然想統(tǒng)一字符編碼,不同國(guó)家出了自己不同的編碼方式,中國(guó)的gb2312就是自 己做出來(lái)的編碼方式,這樣下去每個(gè)國(guó)家都有自己的編碼方式,來(lái)回轉(zhuǎn)換太麻煩了。這時(shí)候出現(xiàn)了新的編碼方式,unicode編碼方式,想將編碼統(tǒng)一,所以規(guī) 定了每個(gè)字符對(duì)應(yīng)的unicode碼。 ? ? ?1、很多文件都是ascii編碼,如果用unicode 太浪費(fèi)。 ? ? ?2、沒(méi)有標(biāo)志位說(shuō)明該幾個(gè)字節(jié)來(lái)解析為一個(gè)符號(hào)。 ? ? ?這時(shí)候拯救世界的utf出現(xiàn)了,utf是unicode的一種實(shí)現(xiàn),只不過(guò)更聰明了。utf16是占用兩字節(jié),或者四字節(jié),utf32是占用四字節(jié)。utf8是很聰明的一種表示方式。 ? ? ?1、對(duì)于單字節(jié)符號(hào),字節(jié)第一位為0,后面7位表示字節(jié)編碼。 ? ? ?2、對(duì)于n字節(jié)符號(hào),第一字節(jié)的前n位都設(shè)為1,第n+1位為0,其余位為編碼位置。 對(duì)于不同的編碼,在文本的最前方有不同的標(biāo)志,unicode 通常有兩位來(lái)表示分別是ff fe, 或者feff, fffe表示big-endian 編碼feff表示litte-endian編碼。utf8是efbbbf來(lái)開(kāi)頭的。可以看出來(lái)utf-8是自解釋的,所以不用帶這個(gè)標(biāo)志文件,大多數(shù)程序 是可以識(shí)別的。但有些程序不能識(shí)別這個(gè)標(biāo)志,比如php就會(huì)直接把這個(gè)標(biāo)志當(dāng)文本解析,不會(huì)忽略。相信很多遇到php輸出文本解析亂碼或者解析錯(cuò)誤的同學(xué) 都遇到這樣的問(wèn)題。 ? ? 如何解決問(wèn)題: ? ? 如果有vim那最好不過(guò)了,去掉命令: ? ? set encoding=utf-8 ? ? set nobomb ? ? 添加命令: ? ? set encoding=utf-8 ? ? set bomb ? ?或者使用notepad++自帶的功能

總結(jié)

以上是生活随笔為你收集整理的程序员永远的痛之字符编码的奥秘的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。