亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

簡單解決Python文件中文編碼問題

系統(tǒng) 2245 0

讀寫中文

需要讀取utf-8編碼的中文文件,先利用sublime text軟件將它改成無DOM的編碼,然后用以下代碼:

            
with codecs.open(note_path, 'r+','utf-8') as f:
line=f.readline()
print line


          

這樣就可以正確地讀出文件里面的中文字符了。

同樣的,如果要在創(chuàng)建的文件中寫入中文,最好也和上面差不多:

            
with codecs.open(st,'a+','utf-8') as book_note:
book_note.write(st)


          

創(chuàng)建中文文件

然后以讀出的字符為文件名,創(chuàng)建文件。

如果直接用上面讀出來的字符串創(chuàng)建文件,則會(huì)出現(xiàn):

            
st=digest_path+"\\"+onenote[0]+".txt"
print st
with open(st,'a+') as book_note:


          

經(jīng)過調(diào)試,應(yīng)該是最后一個(gè)換行符的問題,在生成名字的時(shí)候,將字符trip一下,就能夠得到文件:

            
st=digest_path+"\\"+onenote[0].strip()+".txt"


          

中文編碼問題是用中文的程序員經(jīng)常頭大的問題,在python下也是如此,那么應(yīng)該怎么理解和解決python的編碼問題呢?

我們要知道python內(nèi)部使用的是unicode編碼,而外部卻要面對(duì)千奇百怪的各種編碼,比如作為中國程序經(jīng)常要面對(duì)的gbk,gb2312,utf8等,那這些編碼是怎么轉(zhuǎn)換成內(nèi)部的unicode呢?

首先我們先看一下源代碼文件中使用字符串的情況。源代碼文件作為文本文件就必然是以某種編碼形式存儲(chǔ)代碼的,python默認(rèn)會(huì)認(rèn)為源代碼文件是asci編碼,比如說代碼中有一個(gè)變量賦值:

            
s1='a' 
print s1


          

python認(rèn)為這個(gè)'a'就是一個(gè)asci編碼的字符。在僅僅使用英文字符的情況下一切正常,但是如果用了中文,比如:

            
s1='哈' 
print s1


          

這個(gè)代碼文件被執(zhí)行時(shí)就會(huì)出錯(cuò),就是編碼出了問題。python默認(rèn)將代碼文件內(nèi)容當(dāng)作asci編碼處理,但asci編碼中不存在中文,因此拋出異常。

解決問題之道就是要讓python知道文件中使用的是什么編碼形式,對(duì)于中文,可以用的常見編碼有utf-8,gbk和gb2312等。只需在代碼文件的最前端添加如下:

            
# -*- coding: utf-8 -*-


          

這就是告知python我這個(gè)文件里的文本是用utf-8編碼的,這樣,python就會(huì)依照utf-8的編碼形式解讀其中的字符,然后轉(zhuǎn)換成unicode編碼內(nèi)部處理使用。

不過,如果你在Windows控制臺(tái)下運(yùn)行此代碼的話,雖然程序是執(zhí)行了,但屏幕上打印出的卻不是哈字。這是由于python編碼與控制臺(tái)編碼的不一致造成的。Windows下控制臺(tái)中的編碼使用的

是gbk,而在代碼中使用的utf-8,python按照utf-8編碼打印到gbk編碼的控制臺(tái)下自然就會(huì)不一致而不能打印出正確的漢字。

解決辦法一個(gè)是將源代碼的編碼也改成gbk,也就是代碼第一行改成:

            
# -*- coding: gbk -*-


          

另一種方法是保持源碼文件的utf-8不變,而是在'哈'前面加個(gè)u字,也就是:

            
s1=u'哈' 
print s1


          

這樣就可以正確打印出'哈'字了。

這里的這個(gè)u表示將后面跟的字符串以u(píng)nicode格式存儲(chǔ)。python會(huì)根據(jù)代碼第一行標(biāo)稱的utf-8編碼識(shí)別代碼中的漢字'哈',然后轉(zhuǎn)換成unicode對(duì)象。如果我們用type查看一下'哈'的數(shù)據(jù)類型type(‘哈'),會(huì)得到 ,而type(u'哈'),則會(huì)得到 ,也就是在字符前面加u就表明這是一個(gè)unicode對(duì)象,這個(gè)字會(huì)以u(píng)nicode格式存在于內(nèi)存中,而如果不加u,表明這僅僅是一個(gè)使用某種編碼的字符串,編碼格式取決于python對(duì)源碼文件編碼的識(shí)別,這里就是utf-8。

Python在向控制臺(tái)輸出unicode對(duì)象的時(shí)候會(huì)自動(dòng)根據(jù)輸出環(huán)境的編碼進(jìn)行轉(zhuǎn)換,但如果輸出的不是unicode對(duì)象而是普通字符串,則會(huì)直接按照字符串的編碼輸出字符串,從而出現(xiàn)上面的現(xiàn)象。

使用unicode對(duì)象的話,除了這樣使用u標(biāo)記,還可以使用unicode類以及字符串的encode和decode方法。

unicode類的構(gòu)造函數(shù)接受一個(gè)字符串參數(shù)和一個(gè)編碼參數(shù),將字符串封裝為一個(gè)unicode,比如在這里,由于我們用的是utf-8編碼,所以u(píng)nicode中的編碼參數(shù)使用'utf-8′將字符封裝為

unicode對(duì)象,然后正確輸出到控制臺(tái):

            
s1=unicode(‘哈', ‘utf-8′) 
print s1

          

另外,用decode函數(shù)也可以將一個(gè)普通字符串轉(zhuǎn)換為unicode對(duì)象。很多人都搞不明白python字符串的decode和encode函數(shù)都是什么意思。這里簡要說明一下。

decode是將普通字符串按照參數(shù)中的編碼格式進(jìn)行解析,然后生成對(duì)應(yīng)的unicode對(duì)象,比如在這里我們代碼用的是utf-8,那么把一個(gè)字符串轉(zhuǎn)換為unicode就是如下形式:

            
s2='哈'.decode(‘utf-8′)


          

這時(shí),s2就是一個(gè)存儲(chǔ)了'哈'字的unicode對(duì)象,其實(shí)就和unicode(‘哈', ‘utf-8′)以及u'哈'是相同的。

那么encode正好就是相反的功能,是將一個(gè)unicode對(duì)象轉(zhuǎn)換為參數(shù)中編碼格式的普通字符,比如下面代碼:

            
s3=unicode(‘哈', ‘utf-8′).encode(‘utf-8′)


          

s3現(xiàn)在又變回了utf-8的'哈'。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 在线色综合 | 一级a毛片免费观看久久精品 | 亚洲精品一区二区久久 | 在线观看欧美国产 | 国产黄色影院 | 中文不卡视频 | 日本中文字幕网站 | 久久这里只有精品2 | 奇米777影视成人四色 | www.xxxx欧美| 欧美色p| 91久久国产成人免费观看资源 | 在线观看视频一区 | 国产第一页福利 | 一区二区三区四区国产 | 久久99国产乱子伦精品免费 | 在线观看中文字幕 | 亚洲精品天堂 | 天天操夜夜操美女 | 日韩中文字幕免费 | 4虎最新| 久久综合亚洲伊人色 | 日本b站一卡二不卡 | 中文国产成人精品久久久 | 一及 片日本 | 99精品视频在线免费观看 | 欧美日本在线 | 中文字幕热久久久久久久 | 国产婷婷色一区二区三区 | 久久在线免费观看视频 | 久久久综合香蕉尹人综合网 | 99热6这里只有精品 99热7 | 国产精品一区二区三区免费视频 | 涩涩色中文综合亚洲 | 成人免费一级毛片在线播放视频 | 男人搡女人视频免费看 | 精品久久久久久久久中文字幕 | 中文国产成人精品久久一区 | 国产成人精品一区二区三在线观看 | 仑乱高清在线一级播放 | 天天操天天干天天 |