python的漢字編碼原理

漢字編碼問題是困擾工程師們的一大難題,在最近做的spider項(xiàng)目中,遇到了不少相關(guān)的麻煩,于是花了一些時(shí)間來研究了一下python的字符編碼的問題.

1.程序內(nèi)的編碼問題

在沒有聲明默認(rèn)編碼方式的情況下,python使用ASCII字符來編碼,也就是說,默認(rèn)只支持ASCII從0-127這128個字符,其他非拉丁的字符,如漢字,希伯來語,日語韓語等語言的字符是沒有辦法顯示的,在讀取或者在程序的字符串中出現(xiàn)的時(shí)候,會出現(xiàn)報(bào)錯的情況,這個時(shí)候,需要指定默認(rèn)字符集來解決這個問題
可以使用:
#-*- coding: UTF-8 -*-
也可以使用:
# coding: UTF-8
在文件的開頭(import)的前面來表明程序所使用的字符集,(utf-8可以換成其他字符集如有需要如GBK,big5,latin等等

2.有關(guān)字符集的問題

在計(jì)算機(jī)出現(xiàn)的早期,使用的字符集是舊版的ASCII字符集,在這種字符集中,使用7位表示一個字符,相應(yīng)的,共128個可用的字符.后來,ASCII標(biāo)準(zhǔn)擴(kuò)展到8位,同時(shí)支持一些其他拉丁語族的語言如法語西班牙語中不同于拉丁文的字符,同時(shí)包括了希臘文,還有一些其他字符如積分號等等.

但是仍然不夠,亞洲,非洲有大量的非拉丁語族,希臘語族語言,并且很多使用字符文字而不是字母文字,這就造成了更大的麻煩。人們?yōu)榱私鉀Q這個問題,就發(fā)明了針對不同文字的字符集,比如漢字的GB2312迁沫,GBk,繁體字的BIG5捌蚊,ISO8859集畅,還有如Latin等其他編碼方式,這些編碼方式規(guī)定了一定的數(shù)值映射到不同的字符上面缅糟。

但是這也造成了一定的困難挺智,就是,相同的編碼窗宦,用不同的字符集解釋赦颇,變成了不同的字符,于是出現(xiàn)了б?ЯАзЪСЯ"赴涵、"?????????之類的令人生畏的亂碼

于是人們再次提出了解決方案媒怯,那就是unicode編碼,unicode是一個類的編碼方式髓窜,但是都具有一個特點(diǎn)扇苞,就是一個編碼對應(yīng)唯一字符欺殿,防止解釋成為不同字符。

3.UTF-8編碼

現(xiàn)在最常用鳖敷,也是國際通行的標(biāo)準(zhǔn)是unicode 8 也稱為 UTF-8編碼脖苏,基本編碼方式如下

使用一至六個字節(jié)為每個字符編碼(盡管如此,2003年11月UTF-8被RFC 3629重新規(guī)范定踱,只能使用原來Unicode定義的區(qū)域棍潘,U+0000到U+10FFFF,也就是說最多四個字節(jié)):

  • 128個US-ASCII字符只需一個字節(jié)編碼(Unicode范圍由U+0000至U+007F)崖媚。

  • 帶有附加符號的拉丁文亦歉、希臘文、西里爾字母至扰、亞美尼亞語鳍徽、希伯來文、阿拉伯文敢课、敘利亞文及它拿字母則需要兩個字節(jié)編碼(Unicode范圍由U+0080至U+07FF)。

  • 其他基本多文種平面(BMP)中的字符(這包含了大部分常用字绷杜,如大部分的漢字)使用三個字節(jié)編碼(Unicode范圍由U+0800至U+FFFF)直秆。

  • 其他極少使用的Unicode 輔助平面的字符使用四至六字節(jié)編碼(Unicode范圍由U+10000至U+1FFFFF使用四字節(jié),Unicode范圍由U+200000至U+3FFFFFF使用五字節(jié)鞭盟,Unicode范圍由U+4000000至U+7FFFFFFF使用六字節(jié))圾结。

注意,utf-8是一種變長編碼齿诉,也就是不能一個一個字節(jié)來讀筝野,來解釋的虑乖。UTF-8是ASCII的一個皂冰。因?yàn)橐粋€純ASCII字符串也是一個合法的UTF-8字符串,所以現(xiàn)存的ASCII文本不需要轉(zhuǎn)換滔吠。為傳統(tǒng)的擴(kuò)展ASCII字符集設(shè)計(jì)的軟件通车至担可以不經(jīng)修改或很少修改就能與UTF-8一起使用焕议。

4.python的str和unicode的問題

這兩者有什么區(qū)別呢?

  • str是字符組成的序列

  • unicode 是unicode編碼單元字節(jié)組成的序列

兩者的相互轉(zhuǎn)換關(guān)系
str decode成為unicode
unicode encode成為str

s="abc"
print type(s)
c=s.decode()
print type(c)


得到結(jié)果

<type 'str'>
<type 'unicode'>

注意轉(zhuǎn)換時(shí)必須指定字符集

5.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弧关,一起剝皮案震驚了整個濱河市盅安,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌世囊,老刑警劉巖别瞭,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異株憾,居然都是意外死亡蝙寨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來籽慢,“玉大人浸遗,你說我怎么就攤上這事∠湟冢” “怎么了跛锌?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長届惋。 經(jīng)常有香客問我髓帽,道長,這世上最難降的妖魔是什么脑豹? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任郑藏,我火速辦了婚禮,結(jié)果婚禮上瘩欺,老公的妹妹穿的比我還像新娘必盖。我一直安慰自己,他們只是感情好俱饿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布歌粥。 她就那樣靜靜地躺著,像睡著了一般拍埠。 火紅的嫁衣襯著肌膚如雪失驶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天枣购,我揣著相機(jī)與錄音嬉探,去河邊找鬼。 笑死棉圈,一個胖子當(dāng)著我的面吹牛涩堤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迄损,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼定躏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了芹敌?” 一聲冷哼從身側(cè)響起痊远,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎氏捞,沒想到半個月后碧聪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡液茎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年逞姿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辞嗡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡滞造,死狀恐怖续室,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谒养,我是刑警寧澤挺狰,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站买窟,受9級特大地震影響丰泊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜始绍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一瞳购、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亏推,春花似錦学赛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至篇亭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锄贷,已是汗流浹背译蒂。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谊却,地道東北人柔昼。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像炎辨,于是被迫代替她去往敵國和親捕透。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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

  • 字符集和編碼簡介 在編程中常巢晗簦可以見到各種字符集和編碼乙嘀,包括ASCII,MBCS,Unicode等字符集。確切的說...
    蘭山小亭閱讀 8,461評論 0 13
  • 飯桌上,最精致的下酒菜曹质,是好奇心婴噩。 我:電梯這個行業(yè)擎场,你做了多久? 他:17年几莽。初中畢業(yè)開始的迅办。 我:都說同時(shí)按住...
    GoodNineNine閱讀 623評論 0 2
  • 一直覺得自己有很嚴(yán)重的強(qiáng)迫癥,對一切都無比挑剔章蚣,吹毛求疵站欺。我一直痛恨會遲到的人,厭惡著草率敷衍的人究驴,鄙視著不懂裝懂...
    微塵迷離閱讀 193評論 0 0
  • 今天天氣不錯 明天天氣也會很好 那后天呢洒忧?
    Homo_Sapiens閱讀 207評論 1 1
  • 今天吃過午飯蝴韭,我坐在炕上(一種農(nóng)村里和床類似的東西)和我老媽邀功請賞:“媽,你看我做的飯好不好吃?” 老媽特別不走...
    顧林深深深閱讀 433評論 10 6