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

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

gbk函數(shù)python ? gbk

python中 gbk字符串被識別為unicode(就是讀取到的應(yīng)該是'內(nèi)容內(nèi)容'變成了 u'內(nèi)容內(nèi)容',這樣應(yīng)該如何解碼?

你用的是哪個庫 ,如果是pymssql 的話,我建議換個庫我測試末尾帶b字樣的版本沒有這個問題

目前成都創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、二道江網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

有些庫是有這樣的問題,所有編碼自己加上U,嘗試更換庫試一下

剛才百度了一下,看到一個解決辦法不錯,考慮轉(zhuǎn)載到我的空間,我確實遇到了這樣的問題

方法如下:

python 提供了一個特殊的編碼(?raw_unicode_escape?)用來處理這種情況:

In?[4]:?u'\xe4\xbd\xa0\xe5\xa5\xbd'.encode('raw_unicode_escape')

Out[4]:?'\xe4\xbd\xa0\xe5\xa5\xbd'

In?[5]:?u'\xe4\xbd\xa0\xe5\xa5\xbd'.encode('raw_unicode_escape').decode('utf8')

Out[5]:?u'\u4f60\u597d'

In?[7]:?print?u'\u4f60\u597d'

你好

以前雜沒發(fā)現(xiàn)這個方法呢...我遇到這個問題是找個關(guān)天,換了個庫才搞定

python語言中的如何輸入編號叫什么

Python 默認(rèn)腳本文件都是 ANSCII 編碼的,當(dāng)文件 中有非 ANSCII 編碼范圍內(nèi)的字符的時候就要使用"編碼指示"來修正。 一個module的定義中,如果.py文件中包含中文字符(嚴(yán)格的說是含有非anscii字符),則需要在第一行或第二行指定編碼聲明:

# -*- coding=utf-8 -*-或者 #coding=utf-8 其他的編碼如:gbk、gb2312也可以; 否則會出現(xiàn)類似:SyntaxError: Non-ASCII character '/xe4' in file ChineseTest.py on line 1, but no encoding declared; see for details這樣的異常信息;n.org/peps/pep-0263.html

命令查看腳本默認(rèn)的編碼方式

import sys

sys.getdefaultencoding()

'ascii'

2.2 python中的編碼與解碼

先說一下python中的字符串類型,在python中有兩種字符串類型,分別是str和unicode,他們都是basestring的派生類;str類型是一個包含Characters represent (at least) 8-bit bytes的序列;unicode的每個unit是一個unicode obj;所以:

len(u'中國')的值是2;len('ab')的值也是2;

在str的文檔中有這樣的一句話:The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file. 也就是說在讀取一個文件的內(nèi)容,或者從網(wǎng)絡(luò)上讀取到內(nèi)容時,保持的對象為str類型;如果想把一個str轉(zhuǎn)換成特定編碼類型,需要把str轉(zhuǎn)為Unicode,然后從unicode轉(zhuǎn)為特定的編碼類型如:utf-8、gb2312等;

2.2.1 print 語句解釋編碼問題

print 是打印默認(rèn)的編碼方式,相當(dāng)于對任何對象encode編碼轉(zhuǎn)化成str對象。默認(rèn)是gbk的編碼就是對Unicode進行自動的gbk編碼,再按照gbk編碼輸出。

當(dāng)print語句碰到一個unicode目標(biāo)的時候,會用當(dāng)前python shell環(huán)境的默認(rèn)編碼格式首先對unicode對象進行encode(此時unicode對象已經(jīng)變成了一個str對象了),然后再以默認(rèn)編碼格式為基礎(chǔ),根據(jù)其包含的漢字和編碼的對應(yīng)規(guī)則,把這個str對象解釋成中文并顯示出來。但是當(dāng)print語句碰到的直接是個str目標(biāo)的時候,就不管其從unicode轉(zhuǎn)到str時用的編碼格式是什么,直接用默認(rèn)編碼格式的對應(yīng)規(guī)則來解釋成中文。所以,當(dāng)unicode對象轉(zhuǎn)換成str時的編碼格式和print語句的默認(rèn)編碼格式不一致的時候就會出現(xiàn)亂碼現(xiàn)象。比如在cmd的python shell里面:

復(fù)制代碼

復(fù)制代碼

證明Python 系統(tǒng)默認(rèn)編碼gbk

s= '你好'

s

'\xc4\xe3\xba\xc3'

s = u'你好'

s

u'\xc4\xe3\xba\xc3'

s = '你好'

s

'\xc4\xe3\xba\xc3'

print type(s)

type 'str'

unicode 編碼打印錯誤,print 解析字符串而不是Unicode 編碼

s = u'你好'

print s

??o?

uni = u'你好' #存入一個unicode對象

print uni

你好 #可以正常顯示 相當(dāng)于Unicode.encode(gbk)

uni.encode("gbk")

'\xc4\xe3\xba\xc3' #顯示的是個str對象了,如果type(uni.encode("gbk"))得到的就是str對象

print uni.encode("gbk")

你好 #可以正常顯示,因為在cmd下的pythonshell里默認(rèn)個編碼格式就是gbk,gbk解析

uni.encode("utf-8")

'\xe4\xbd\xa0\xe5\xa5\xbd' #可以看到,encode用的編碼格式不同,編成的字符串也是不同的

print uni.encode("utf-8")

浣犲ソ #亂碼,因為用了gbk中漢字和字符串編碼格式對應(yīng)規(guī)則去解釋了用utf-8編碼成的字符串。解釋的編碼格式不對應(yīng)。

#######さらに######

print '\xc4\xe3' #自己寫出來的這么個字符串(前面不加r)的話也會被print解釋成中文,按照編碼格式輸出

print uni.encode("utf-8").decode("gbk")

浣犲ソ

'''

亂碼,而且和上面的亂碼一樣,這是因為,在uni被utf-8 encode之后,這個對象變成了str對象,是'\xe4\xbd\xa0\xe5\xa5\xbd' 這個。

后來,它又被按照gbk的規(guī)則解碼,又變回了unicode,但是此時它在內(nèi)存里的二進制數(shù)據(jù)已經(jīng)和最初的uni不一樣了。

最初的uni,應(yīng)該是'\xc4\xe3\xba\xc3'.decode("gbk"),而現(xiàn)在的這個東西,他decode之前的字符串已經(jīng)變過了。

這么一個東西再拿去print,又把它編碼成了gbk格式,相當(dāng)于前面那步decode沒有做,變回了'\xe4\xbd\xa0\xe5\xa5\xbd'。

再解釋成漢字,當(dāng)然就和最開始用uni編碼成utf-8格式再解釋成漢字的亂碼一樣了

'''

復(fù)制代碼

2.2.2 腳本print 打印的正確方式

上面已經(jīng)證明了系統(tǒng)的默認(rèn)編碼方式是gbk,就是print 最后正確的編碼方式應(yīng)該是gbk

兩種解決編碼不匹配的情況:

一是明確的指示出 s 的編碼方式

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

s = '中文'

s.decode('utf-8').encode('gb2312')

二是更改 sys.defaultencoding 為文件的編碼方式

#! /usr/bin/env python

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

import sys

reload(sys) # Python2.5 初始化后會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入

sys.setdefaultencoding('utf-8')

str = '中文'

str.encode('gb2312')

三、實踐經(jīng)驗中爬取數(shù)據(jù)的獲得

復(fù)制代碼

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

'''

#加油兩個字可以很好的比較編碼正確和錯誤

#### 錯誤的處理方式,

s = "中文"

print s

#這里print就不是輸出gbk的編碼,是按照頭文件utf-8的格式輸出

# 結(jié)果:中文

print s.decode('utf-8')

#結(jié)果中文,s進行解碼稱為Unicode,print打印就和系統(tǒng)print打印一樣自動將Unicode進行

#解碼,不用encode編碼也能輸出,但是最好轉(zhuǎn)化成為字符串輸出。

上面實例就是錯誤使用編碼,錯誤使用編碼會出現(xiàn)個別字體的亂碼。

'''

'''

要點1、聲明頭文件# -*- coding: utf-8 -*- 說明所有的代碼和中文是utf-8的編碼方式

要點2、print輸出函數(shù)輸出到前臺cmd中的默認(rèn)系統(tǒng)編碼方式是GBK,

要點3、盡量將Unicode轉(zhuǎn)化成為字符串str (gbk或者utf-8),再去處理。

#unicode 轉(zhuǎn)化成為字符串

s = u'加油'

print s

#結(jié)果:加油。原因:系統(tǒng)自動將Unicode升級gbk編碼成為字符串,然后系統(tǒng)print 打印gbk

print s.encode('utf-8')

#結(jié)果:鍔犳補。錯誤原因:Unicode 編碼成為utf-8的字符串形式,但是print打印系統(tǒng)是gbk的,編碼沖突。

print s.encode('gbk')

#結(jié)果:加油。原因:和print s等價,認(rèn)為編碼了gbk,系統(tǒng)打印

ss = "加油"

print ss

#結(jié)果:鍔犳補。原因:ss為utf-8的字符串str,print 打印的對應(yīng)編碼字符串是gbk的,所以編碼沖突。

print ss.decode('utf-8').encode('gbk')

#結(jié)果:加油。原因:ss首先從字符串編碼utf-8解碼成為unicode,然后進行編碼gbk,等價使用print ss.decode('utf-8')。

'''

'''

3.1python中關(guān)于中文轉(zhuǎn)換url編碼的問題

爬蟲的時候我們經(jīng)常會碰到中文鏈接編碼出現(xiàn)變換的問題,

例如'麗江'中文在url的地址編碼卻是'%E4%B8%BD%E6%B1%9F',

因此需 要做一個轉(zhuǎn)換。這里我們就用到了模塊urllib。

'''

import urllib

data = '麗江'

print data.decode('utf-8').encode('gbk')

#對utf-8的中文編碼

print urllib.quote(data)

#那我們想轉(zhuǎn)回去呢?

print urllib.unquote('%E4%B8%BD%E6%B1%9F').decode('utf-8').encode('gbk')

'''

'麗江'在網(wǎng)頁編碼是gbk的轉(zhuǎn)換碼是'%C0%F6%BD%AD',utf-8中的轉(zhuǎn)化碼是'%E4%B8%BD%E6%B1%9F',其實是編碼問題。

百度的是gbk,其他的一般網(wǎng)站比如google就是utf8的。所以可以用下列語句實現(xiàn)。

'''

#江蘇課題的編碼轉(zhuǎn)化

import sys,urllib

s = '江蘇'

print urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))

print urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))

for place in ['南京','無錫','徐州','常州','蘇州','鹽城','南通','連云港','淮安','鹽城','揚州']:

print urllib.quote(place)

####################

#結(jié)果:

'''

麗江

%E4%B8%BD%E6%B1%9F

麗江

%E4%B8%BD%E6%B1%9F

%E6%B6%93%E8%8A%A5%E7%9D%99

'''

python抓取網(wǎng)頁內(nèi)容時出錯,UnicodeEncodeError: 'gbk' codec can't encode character '\ue4bf.....

問題是這樣的,網(wǎng)頁的數(shù)據(jù)應(yīng)該是'utf-8'編碼,這個可以在網(wǎng)頁的head上面看得到,然后你爬網(wǎng)頁的時候會把它轉(zhuǎn)化成Unicode,出問題的是在print()這兒,對于print()這個函數(shù),他需要把內(nèi)容轉(zhuǎn)化為'gbk'編碼才能顯示出來. 然后解決辦法是這樣,你在轉(zhuǎn)化后的Unicode編碼的string后面,加上 .encode('GBK','ignore').decode('GBk') 也就是先用gbk編碼,忽略掉非法字符,然后再譯碼,是不是很有道理 應(yīng)該是這樣的,因為我和你遇到同樣的問題,現(xiàn)在解決了

python3.3中文亂碼與默認(rèn)編碼格式設(shè)定。

python 3和2很大區(qū)別就是python本身改為默認(rèn)用unicode編碼。

字符串不再區(qū)分"abc"和u"abc", 字符串"abc"默認(rèn)就是unicode,不再代表本地編碼、

由于有這種內(nèi)部編碼,像c#和java類似,再沒有必要在語言環(huán)境內(nèi)做類似設(shè)置編碼,比如“sys.setdefaultencoding”;

也因此也python 3的代碼和包管理上打破了和2.x的兼容。2.x的擴展包要適應(yīng)這種情況改寫。

另一個問題是語言環(huán)境內(nèi)只有unicode怎么輸出gbk之類的本地編碼。

答按慣例都在(序列化)輸出時才轉(zhuǎn)換成本地編碼。

比如

file.write("GBK的中文".encode("GBK"))

python環(huán)境內(nèi)字符串用str.encode("GBK")方法輸出成字節(jié)串用于和其他環(huán)境交流。


本文標(biāo)題:gbk函數(shù)python ? gbk
標(biāo)題鏈接:http://weahome.cn/article/dooophd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部