国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Python2.x中的編碼問(wèn)題

            Python2.x中的編碼問(wèn)題

            來(lái)源:千鋒教育
            發(fā)布人:xqq
            時(shí)間: 2023-11-07 10:44:45 1699325085

            1.str和unicode

            str和unicode都是basestring的子類。嚴(yán)格意義上說(shuō),str其實(shí)是字節(jié)串,它是unicode經(jīng)過(guò)編碼后的字節(jié)組成的序列。對(duì)UTF-8編碼的str'漢'使用len()函數(shù)時(shí),結(jié)果是3,因?yàn)閷?shí)際上,UTF-8編碼的'漢'=='\xE6\xB1\x89'。

            unicode才是真正意義上的字符串,對(duì)字節(jié)串str使用正確的字符編碼進(jìn)行解碼后獲得,并且len(u'漢')==1。

            再來(lái)看看encode()和decode()兩個(gè)basestring的實(shí)例方法,理解了str和unicode的區(qū)別后,這兩個(gè)方法就不會(huì)再混淆了:

            13#coding:UTF-8

            u=u'漢'

            printrepr(u)#u'\u6c49'

            s=u.encode('UTF-8')

            printrepr(s)#'\xe6\xb1\x89'

            u2=s.decode('UTF-8')

            printrepr(u2)#u'\u6c49'

            #對(duì)unicode進(jìn)行解碼是錯(cuò)誤的

            #s2=u.decode('UTF-8')

            #同樣,對(duì)str進(jìn)行編碼也是錯(cuò)誤的

            #u2=s.encode('UTF-8')

            需要注意的是,雖然對(duì)str調(diào)用encode()方法是錯(cuò)誤的,但實(shí)際上Python不會(huì)拋出異常,而是返回另外一個(gè)相同內(nèi)容但不同id的str;對(duì)unicode調(diào)用decode()方法也是這樣。很不理解為什么不把encode()和decode()分別放在unicode和str中而是都放在basestring中,但既然已經(jīng)這樣了,我們就小心避免犯錯(cuò)吧。

            2.字符編碼聲明

            源代碼文件中,如果有用到非ASCII字符,則需要在文件頭部進(jìn)行字符編碼的聲明,如下:

            1#-*-coding:UTF-8-*-

            實(shí)際上Python只檢查#、coding和編碼字符串,其他的字符都是為了美觀加上的。另外,Python中可用的字符編碼有很多,并且還有許多別名,還不區(qū)分大小寫,比如UTF-8可以寫成u8。參見(jiàn)http://docs.python.org/library/codecs.html#standard-encodings。

            另外需要注意的是聲明的編碼必須與文件實(shí)際保存時(shí)用的編碼一致,否則很大幾率會(huì)出現(xiàn)代碼解析異?!,F(xiàn)在的IDE一般會(huì)自動(dòng)處理這種情況,改變聲明后同時(shí)換成聲明的編碼保存,但文本編輯器控們需要小心:)

            3.讀寫文件

            內(nèi)置的open()方法打開(kāi)文件時(shí),read()讀取的是str,讀取后需要使用正確的編碼格式進(jìn)行decode()。write()寫入時(shí),如果參數(shù)是unicode,則需要使用你希望寫入的編碼進(jìn)行encode(),如果是其他編碼格式的str,則需要先用該str的編碼進(jìn)行decode(),轉(zhuǎn)成unicode后再使用寫入的編碼進(jìn)行encode()。如果直接將unicode作為參數(shù)傳入write()方法,Python將先使用源代碼文件聲明的字符編碼進(jìn)行編碼然后寫入。

            14#coding:UTF-8

            f=open('test.txt')

            s=f.read()

            f.close()

            printtype(s)#

            #已知是GBK編碼,解碼成unicode

            u=s.decode('GBK')

            f=open('test.txt','w')

            #編碼成UTF-8編碼的str

            s=u.encode('UTF-8')

            f.write(s)

            f.close()

            另外,模塊codecs提供了一個(gè)open()方法,可以指定一個(gè)編碼打開(kāi)文件,使用這個(gè)方法打開(kāi)的文件讀取返回的將是unicode。寫入時(shí),如果參數(shù)是unicode,則使用open()時(shí)指定的編碼進(jìn)行編碼后寫入;如果是str,則先根據(jù)源代碼文件聲明的字符編碼,解碼成unicode后再進(jìn)行前述操作。相對(duì)內(nèi)置的open()來(lái)說(shuō),這個(gè)方法比較不容易在編碼上出現(xiàn)問(wèn)題。

            20#coding:GBK

            importcodecs

            f=codecs.open('test.txt',encoding='UTF-8')

            u=f.read()

            f.close()

            printtype(u)#

            f=codecs.open('test.txt','a',encoding='UTF-8')

            #寫入unicode

            f.write(u)

            #寫入str,自動(dòng)進(jìn)行解碼編碼操作

            #GBK編碼的str

            s='漢'

            printrepr(s)#'\xba\xba'

            #這里會(huì)先將GBK編碼的str解碼為unicode再編碼為UTF-8寫入

            f.write(s)

            f.close()

            4.與編碼相關(guān)的方法

            sys/locale模塊中提供了一些獲取當(dāng)前環(huán)境下的默認(rèn)編碼的方法。

            31#coding:gbk

            importsys

            importlocale

            defp(f):

            print'%s.%s():%s'%(f.__module__,f.__name__,f())

            #返回當(dāng)前系統(tǒng)所使用的默認(rèn)字符編碼

            p(sys.getdefaultencoding)

            #返回用于轉(zhuǎn)換Unicode文件名至系統(tǒng)文件名所使用的編碼

            p(sys.getfilesystemencoding)

            #獲取默認(rèn)的區(qū)域設(shè)置并返回元祖(語(yǔ)言,編碼)

            p(locale.getdefaultlocale)

            #返回用戶設(shè)定的文本數(shù)據(jù)編碼

            #文檔提到thisfunctiononlyreturnsaguess

            p(locale.getpreferredencoding)

            #\xba\xba是'漢'的GBK編碼

            #mbcs是不推薦使用的編碼,這里僅作測(cè)試表明為什么不應(yīng)該用

            printr"'\xba\xba'.decode('mbcs'):",repr('\xba\xba'.decode('mbcs'))

            #在筆者的Windows上的結(jié)果(區(qū)域設(shè)置為中文(簡(jiǎn)體,中國(guó)))

            #sys.getdefaultencoding():gbk

            #sys.getfilesystemencoding():mbcs

            #locale.getdefaultlocale():('zh_CN','cp936')

            #locale.getpreferredencoding():cp936

            #'\xba\xba'.decode('mbcs'):u'\u6c49'

            以上內(nèi)容為大家介紹了Python2.x中的編碼問(wèn)題,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            python基本輸入輸出函數(shù)

            python程序設(shè)計(jì)中有三個(gè)重要的基本輸入、輸出函數(shù),用于輸入、轉(zhuǎn)換和輸出,分別是input(),eval(),print()1,input()函數(shù)"""input()函數(shù)從控制臺(tái)...詳情>>

            2023-11-07 13:19:34
            Python之map、reduce和filter

            今天給大家介紹的是Python當(dāng)中三個(gè)非常神奇的方法:map、reduce和filter。不知道大家看到map和reduce的時(shí)候有沒(méi)有什么感覺(jué),如果看過(guò)之前我們大...詳情>>

            2023-11-07 13:01:34
            Python工具庫(kù)之collections

            collection在英文當(dāng)中有容器的意思,所以顧名思義,這是一個(gè)容器的集合。這個(gè)庫(kù)當(dāng)中的容器很多,有一些不是很常用,本篇文章選擇了其中最常用的...詳情>>

            2023-11-07 12:54:22
            Python中heapq與優(yōu)先隊(duì)列

            今天的文章來(lái)介紹Python當(dāng)中一個(gè)蠻有用的庫(kù)——heapq。heapq的全寫是heapqueue,是堆隊(duì)列的意思。這里的堆和隊(duì)列都是數(shù)據(jù)結(jié)構(gòu),在后序的文章當(dāng)...詳情>>

            2023-11-07 12:25:33
            python閉包的定義

            如果在一個(gè)內(nèi)部函數(shù)中,引用了外部非全局作用域中的變量,那么這個(gè)內(nèi)部函數(shù)就被認(rèn)為是閉包(closure)。在一些語(yǔ)言中,在函數(shù)中可以(嵌套)定義另...詳情>>

            2023-11-07 11:53:09
            快速通道