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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符集和编码

發(fā)布時間:2025/6/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符集和编码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

字符集和編碼--石鍋拌飯

?今天被一個python編碼問題折騰了半下午。編碼問題一直是個讓人比較糾結(jié)的問題,寫這篇文章想簡單的總結(jié)下python中一些常見的編碼問題以及解決方式。這是第一篇,先總結(jié)下字符集和編碼的一些基本概念和內(nèi)容。


在編程中經(jīng)常能夠見到各種字符集和編碼,包含ASCII,MBCS,Unicode等字符集。確切的說。事實上字符集和編碼是兩個不同概念,僅僅是有些地方有重合罷了。對于ASCII。MBCS等字符集。基本上一個字符集方案僅僅採用一種編碼方案,而對于Unicode。字符集和編碼方案是明白區(qū)分的。那么先有幾個術(shù)語須要說明下。以下這段術(shù)語說明摘抄自伯樂在線《關(guān)于字符編碼。你所須要知道的知識》:

  • 字符集(Character Set):顧名思義,就是字符的集合。如ASCII字符集,定義了128個字符,而gb2312定義了7445個字符。

    計算機中字符集的嚴格定義來說指的是已編號的字符的有序集合(不一定連續(xù))。

  • 字符碼(Code Point):指的就是字符集中每一個字符的數(shù)字編號。比如ASCII字符集用0-127這連續(xù)的128個數(shù)字分別表示128個字符。GBK字符集使用區(qū)位碼的方式為每一個字符編號,首先定義一個94X94的矩陣,行稱為“區(qū)”,列稱為“位”。然后將全部國標漢字放入矩陣其中,這樣每一個漢字就能夠用唯一的“區(qū)位”碼來標識了。比如“中”字被放到54區(qū)第48位。因此字符碼就是5448。

    而Unicode中將字符集依照一定的類別劃分到0~16這17個層面(Planes)中。每一個層面中擁有2

    16=65536個字符碼,因此Unicode總共擁有的字符碼,也即是Unicode的字符空間總共同擁有17*65536=1114112。
  • 字符編碼:將字符集中的字符碼映射為字節(jié)流的一種詳細實現(xiàn)方案。比如ASCII字符編碼規(guī)定使用單字節(jié)中低位的7個比特去編碼全部的字符。

    比如‘A’的編號是65,用單字節(jié)表示就是0×41。因此寫入存儲設備的時候就是b’01000001’。

    GBK編碼則是將區(qū)位碼(GBK的字符碼)中的區(qū)碼和位碼的分別加上0xA0(160)的偏移(之所以要加上這種偏移,主要是為了和ASCII碼兼容)。比如剛剛提到的“中”字,區(qū)位碼是5448。十六進制是0×3630,區(qū)碼和位碼分別加上0xA0的偏移之后就得到0xD6D0,這就是“中”字的GBK編碼結(jié)果。

  • 代碼頁(Code Page)一種字符編碼詳細形式。

    早期字符相對少,因此一般會使用類似表格的形式將字符直接映射為字節(jié)流,然后通過查表的方式來實現(xiàn)字符的編解碼。現(xiàn)代操作系統(tǒng)沿用了這樣的方式。

    比如Windows使用936代碼頁、Mac系統(tǒng)使用EUC-CN代碼頁實現(xiàn)GBK字符集的編碼,名字盡管不一樣。但對于同一漢字的編碼肯定是一樣的。



1 ASCII

當中ASCII標準本身就規(guī)定了字符和字符編碼方式,採用單字節(jié)編碼,總共能夠編碼128個字符,如空格的編碼是32。小寫字母a是97,所以ASCII既是字符集又是編碼方案。


2 MBCS

對于英文來說,128個符號編碼已經(jīng)夠用了,然而對于其它語言比方中文,顯然就不夠了。

因此就出現(xiàn)了多字節(jié)字符集MBCS(Multi-Byte Character Set)。如GB2312,GBK,GB18030,BIG5等編碼都屬于MBCS。

由于MBCS大都使用2個字節(jié)編碼,所以有時候也叫DBCS(Double-Byte Character Set)。

我們在Linux系統(tǒng)中看到含有中文的文件編碼經(jīng)常是CP936,那這個事實上就是GBK編碼了,這個名字的由來是由于IBM以前發(fā)明了一個Code Page的概念,把這些多字節(jié)編碼收入當中,GBK編碼正好位于936頁,所以就簡稱CP936了。


3 Unicode

而后大家認為各種編碼太多不方便,不如全部語言字符都使用一套字符集來表示。于是就出現(xiàn)了Unicode。

Unicode/UCS(Unicode Character Set)標準僅僅是一個字符集標準,可是它并沒有規(guī)定字符的存儲和傳輸方式。

Unicode是一種字符集而不是詳細的編碼,它主要有3種編碼方式:最初Unicode標準使用2個字節(jié)表示一個字符。編碼方案是UTF-16,還有使用4個字節(jié)表示一個字符的編碼方案UTF-32。而后來使用英文字符的國家認為不好,原來一個字符存儲的如今變成了2個字符。空間增大了一倍,由此UTF-8編碼。UTF-8編碼中。英文占一個字節(jié),中文占3個字節(jié)。


如上面所提到的,Unicode字符集主要採用UTF-8,UTF-16等方式進行編碼存儲。當然,gbk等字符編碼也能夠編碼Unicode全部的字符集,也算是Unicode的一種字符編碼。那么這種話。計算機怎樣知道文件採用哪種方式編碼呢?Unicode規(guī)范中又定義,在每一個文件最前面增加一個表示編碼順序的字符BOM(Byte Order Mark)。比方石鍋拌飯中的“石”的UTF-16編碼是77F3,採用UTF-16方式存儲使用2個字節(jié),一個字節(jié)是77,一個字節(jié)是F3.存儲的時候假設77在前面,F3在后面。則稱為big endian方式。反之,則是Little endian方式。。這個字符正好也是2個字節(jié)。為FEFF。假設一個文本文件頭兩個字節(jié)威FEFF,則表示採用Big endian方式編碼;否則就是Little endian方式。

而UTF-8的BOM是EFBBBF,總結(jié)例如以下:

BOM_UTF8 '\xEF\xBB\xBF' BOM_UTF16_LE '\xFF\xFE' BOM_UTF16_BE '\xFE\xFF'


并非全部的編輯器都會寫入BOM。但即使沒有BOM,Unicode還是能夠讀取的,僅僅是須要指定編碼,不然可能會失效。


4 ANSI

此外另一種不得不提的是ANSI,ANSI在windows系統(tǒng)中極為常見,事實上ANSI是Windows code pages,這個模式依據(jù)當前的locale選定詳細編碼,假設系統(tǒng)locale是中文簡體則採用GBK編碼,繁體中文為BIG5編碼,日文則是JIS編碼。


此外windows中喜歡把BOM_UTF16_LE編碼稱作Unicode,把BOM_UTF8稱作UTF-8。也有人說UTF-8不須要BOM來標示,事實上是不多的。這是由于編輯器一般默認使用UTF-8來測試字符編碼而已,假設能夠成功解碼。就用UTF-8進行解碼。即便最開始採用的是ANSI保存的,打開文件時還是最先使用UTF-8來解碼。比方你用windows的記事本程序新建一個文件,寫入“姹塧”并用ANSI編碼保存。再次打開文件,會發(fā)現(xiàn)“姹塧”會變成“漢a”。


5 實例分析

還是以石鍋拌飯的“石”字來看看在windows以下各種編碼方式下的編碼吧。

打開windows的記事本程序,分別用ANSI。Unicode(實際是BOM_UTF16_LE),Unicode Big endian。UTF-8這幾種編碼方式看看終于是否跟之前分析的一樣。

這里使用UltraEdit來查看16進制編碼,能夠打開“編輯”-》16進制編輯功能來查看。


ANSI編碼保存,編碼是CA AF。這也表示GBK編碼存儲也採用了Big endian方式。

Unicode編碼保存,編碼是FF FE F3 77。?

Unicode Big endian編碼保存,編碼是 FE FF 77 F3。?

UTF-8編碼保存。編碼是EF BB BF E7 9F B3。


6 參考資料

  • Python字符編碼具體解釋
  • 阮一峰: 字符編碼筆記
  • 知乎: Windows 記事本的 ANSI、Unicode、UTF-8 這三種編碼模式有什么差別?
  • 關(guān)于字符編碼。你所須要知道的
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的字符集和编码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 无码精品一区二区免费 | 第一章婶婶的性事 | 久久国产一区二区 | 亚洲一级精品 | 人妻少妇偷人精品视频 | 日韩少妇视频 | 韩国理论午夜 | 超碰97在线看 | 91在线观看喷潮 | 97人妻精品一区二区三区 | 国产av无码专区亚洲av麻豆 | 免费观看av网站 | 亚洲国产精华液网站w | 国产午夜毛片 | 成人午夜激情视频 | 美腿丝袜一区二区三区 | 免费在线观看黄视频 | 国产探花精品在线 | 欧美性色网| 综合久久久久 | 国产成人无码aa精品一区 | 69视频一区二区三区 | 中文字幕精品无码亚 | 少妇免费看 | 热久久久久久 | 国产精品日日做人人爱 | 精品国产一二三区 | 最近免费中文字幕中文高清百度 | 亚洲情趣| 污视频网站免费 | 日本中文字幕在线不卡 | 福利片av | 久久精品动漫 | 久草www | 日本在线播放一区 | 黄频在线免费观看 | 欧美性xxxxx极品娇小 | 福利网址在线观看 | 青青草在线免费观看 | 免费人成在线观看网站 | 一本一道久久a久久 | 成人激情自拍 | 深夜成人福利视频 | 亚洲97| 中文字幕精品无码亚 | 91麻豆影院 | 日韩欧美中出 | 欧美77777| 成人网在线播放 | 2023天天操 | 久久久久久久影院 | 欧美性第一页 | 日本丰满熟妇videossex一 | 亚洲毛片一区二区三区 | av免费在线观看网址 | 久久黄色av | 蝌蚪久久 | 久久久久久影院 | 亚洲啪啪网址 | 狠狠操狠狠操狠狠操 | 日本少妇videos高潮 | 精彩久久| 欧美日韩亚洲不卡 | 日韩夜夜高潮夜夜爽无码 | 日本视频一区二区三区 | 亚洲中文在线一区 | 欧美日韩国产电影 | 不卡av一区 | 都市激情校园春色亚洲 | 自拍偷拍色图 | 亚洲区国产区 | 成年丰满熟妇午夜免费视频 | 丁香啪啪 | 午夜免费看片 | 亚洲精品在线免费播放 | 日本一级大毛片a一 | 91调教视频| 宅男午夜影院 | 91av免费在线观看 | 中文字幕在线视频一区二区 | 欧美高清二区 | jizz另类| 黄色不雅视频 | 日韩成人一区二区三区 | 四虎影视免费永久大全 | 草色噜噜噜av在线观看香蕉 | 亚洲天堂v | 秋霞午夜伦理 | 日韩高清在线播放 | www.久久爱 | 国产精品二区在线观看 | 亚洲精品自拍 | 成人午夜视频免费观看 | 日韩中文字幕电影 | 四色成人av永久网址 | 日韩久久久精品 | 一区二区不卡视频在线观看 | 欧洲av片| 日本熟女一区二区 |