真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何解決pythonutf-8問題

本篇文章為大家展示了如何解決python utf-8 問題,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

岳麓網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,岳麓網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為岳麓上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的岳麓做網(wǎng)站的公司定做!

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

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

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

s1=’a’ 
print s1

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

s1=’哈’ 
print s1

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

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

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

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

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

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

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

# -*- coding: gbk
-*-

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

s1=u’哈’ 
print s1

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

這里的這個(gè)u表示將后面跟的字符串以unicode格式存儲。python會根據(jù)代碼第一行標(biāo)稱的utf-8編碼識別代碼中的漢字’哈’,然后轉(zhuǎn)換成unicode對象。如果我們用type查看一下’哈’的數(shù)據(jù)類

型type(‘哈’),會得到,而type(u’哈’),則會得到,也就是在字符前面加u就表明這是一個(gè)unicode對象,這個(gè)字會以unicode格式存在于內(nèi)存中,而如果不加u

,表明這僅僅是一個(gè)使用某種編碼的字符串,編碼格式取決于python對源碼文件編碼的識別,這里就是utf-8。

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

象。

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

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

unicode對象,然后正確輸出到控制臺:

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

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

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

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

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

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

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

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

上述內(nèi)容就是如何解決python utf-8 問題,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前文章:如何解決pythonutf-8問題
標(biāo)題網(wǎng)址:http://weahome.cn/article/ghhshj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部