導航:首頁 > 編程語言 > pythonurl漢字編碼

pythonurl漢字編碼

發布時間:2023-02-09 07:17:35

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

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

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

命令查看腳本默認的編碼方式
>>> 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. 也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等;

2.2.1 print 語句解釋編碼問題

print 是列印默認的編碼方式,相當於對任何對象encode編碼轉化成str對象。默認是gbk的編碼就是對Unicode進行自動的gbk編碼,再按照gbk編碼輸出。

當print語句碰到一個unicode目標的時候,會用當前python shell環境的默認編碼格式首先對unicode對象進行encode(此時unicode對象已經變成了一個str對象了),然後再以默認編碼格式為基礎,根據其包含的漢字和編碼的對應規則,把這個str對象解釋成中文並顯示出來。但是當print語句碰到的直接是個str目標的時候,就不管其從unicode轉到str時用的編碼格式是什麼,直接用默認編碼格式的對應規則來解釋成中文。所以,當unicode對象轉換成str時的編碼格式和print語句的默認編碼格式不一致的時候就會出現亂碼現象。比如在cmd的python shell裡面:

復制代碼
復制代碼
證明Python 系統默認編碼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
ÄãºÃ
>>>uni = u'你好' #存入一個unicode對象
>>>print uni
你好 #可以正常顯示 相當於Unicode.encode(gbk)
>>>uni.encode("gbk")
'\xc4\xe3\xba\xc3' #顯示的是個str對象了,如果type(uni.encode("gbk"))得到的就是str對象
>>>print uni.encode("gbk")
你好 #可以正常顯示,因為在cmd下的pythonshell里默認個編碼格式就是gbk,gbk解析
>>>uni.encode("utf-8")
'\xe4\xbd\xa0\xe5\xa5\xbd' #可以看到,encode用的編碼格式不同,編成的字元串也是不同的
>>>print uni.encode("utf-8")
浣犲ソ #亂碼,因為用了gbk中漢字和字元串編碼格式對應規則去解釋了用utf-8編碼成的字元串。解釋的編碼格式不對應。
#######さらに######
>>>print '\xc4\xe3' #自己寫出來的這么個字元串(前面不加r)的話也會被print解釋成中文,按照編碼格式輸出

>>>print uni.encode("utf-8").decode("gbk")
浣犲ソ
'''
亂碼,而且和上面的亂碼一樣,這是因為,在uni被utf-8 encode之後,這個對象變成了str對象,是'\xe4\xbd\xa0\xe5\xa5\xbd' 這個。
後來,它又被按照gbk的規則解碼,又變回了unicode,但是此時它在內存里的二進制數據已經和最初的uni不一樣了。
最初的uni,應該是'\xc4\xe3\xba\xc3'.decode("gbk"),而現在的這個東西,他decode之前的字元串已經變過了。
這么一個東西再拿去print,又把它編碼成了gbk格式,相當於前面那步decode沒有做,變回了'\xe4\xbd\xa0\xe5\xa5\xbd'。
再解釋成漢字,當然就和最開始用uni編碼成utf-8格式再解釋成漢字的亂碼一樣了
'''

復制代碼

2.2.2 腳本print 列印的正確方式

上面已經證明了系統的默認編碼方式是gbk,就是print 最後正確的編碼方式應該是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')

三、實踐經驗中爬取數據的獲得

復制代碼
# -*- coding: utf-8 -*-
'''
#加油兩個字可以很好的比較編碼正確和錯誤
#### 錯誤的處理方式,
s = "中文"
print s
#這里print就不是輸出gbk的編碼,是按照頭文件utf-8的格式輸出
# 結果:中文
print s.decode('utf-8')
#結果中文,s進行解碼稱為Unicode,print列印就和系統print列印一樣自動將Unicode進行
#解碼,不用encode編碼也能輸出,但是最好轉化成為字元串輸出。
上面實例就是錯誤使用編碼,錯誤使用編碼會出現個別字體的亂碼。
'''

'''
要點1、聲明頭文件# -*- coding: utf-8 -*- 說明所有的代碼和中文是utf-8的編碼方式
要點2、print輸出函數輸出到前台cmd中的默認系統編碼方式是GBK,
要點3、盡量將Unicode轉化成為字元串str (gbk或者utf-8),再去處理。

#unicode 轉化成為字元串
s = u'加油'
print s
#結果:加油。原因:系統自動將Unicode升級gbk編碼成為字元串,然後系統print 列印gbk
print s.encode('utf-8')
#結果:鍔犳補。錯誤原因:Unicode 編碼成為utf-8的字元串形式,但是print列印系統是gbk的,編碼沖突。
print s.encode('gbk')
#結果:加油。原因:和print s等價,認為編碼了gbk,系統列印
ss = "加油"
print ss
#結果:鍔犳補。原因:ss為utf-8的字元串str,print 列印的對應編碼字元串是gbk的,所以編碼沖突。
print ss.decode('utf-8').encode('gbk')
#結果:加油。原因:ss首先從字元串編碼utf-8解碼成為unicode,然後進行編碼gbk,等價使用print ss.decode('utf-8')。
'''

'''
3.1python中關於中文轉換url編碼的問題
爬蟲的時候我們經常會碰到中文鏈接編碼出現變換的問題,
例如'麗江'中文在url的地址編碼卻是'%E4%B8%BD%E6%B1%9F',
因此需 要做一個轉換。這里我們就用到了模塊urllib。
'''
import urllib
data = '麗江'
print data.decode('utf-8').encode('gbk')
#對utf-8的中文編碼
print urllib.quote(data)
#那我們想轉回去呢?
print urllib.unquote('%E4%B8%BD%E6%B1%9F').decode('utf-8').encode('gbk')

'''
'麗江'在網頁編碼是gbk的轉換碼是'%C0%F6%BD%AD',utf-8中的轉化碼是'%E4%B8%BD%E6%B1%9F',其實是編碼問題。
網路的是gbk,其他的一般網站比如google就是utf8的。所以可以用下列語句實現。
'''

#江蘇課題的編碼轉化
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)

####################
#結果:
'''
>>>
麗江
%E4%B8%BD%E6%B1%9F
麗江
%E4%B8%BD%E6%B1%9F
%E6%B6%93%E8%8A%A5%E7%9D%99
>>>
'''

❷ python 無法轉url 編碼怎麼解決

今天要處理網路貼吧的東西。想要做一個關鍵詞的list,每次需要時,直接添加 到list裡面就可以了。但是添加到list裡面是中文的情況(比如『麗江』),url的地址編碼卻是'%E4%B8%BD%E6%B1%9F',因此需 要做一個轉換。這里我們就用到了模塊urllib。
>>> import urllib
>>> data = '麗江'
>>> print data
麗江
>>> data
'\xe4\xb8\xbd\xe6\xb1\x9f'
>>>urllib.quote(data)
'%E4%B8%BD%E6%B1%9F'
那我們想轉回去呢?
>>> urllib.unquote('%E4%B8%BD%E6%B1%9F')
'\xe4\xb8\xbd\xe6\xb1\x9f'
>>> printurllib.unquote('%E4%B8%BD%E6%B1%9F')
麗江
細心的同學會發現貼吧url中出現的是%C0%F6%BD%AD,而非'%E4%B8%BD%E6%B1%9F',其實是編碼問題。網路的是gbk,其他的一般網站比如google就是utf8的。所以可以用下列語句實現。
>>> import sys,urllib
>>> s = '麗江'
>>> urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
'%C0%F6%BD%AD'
>>> urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))
'%E4%B8%BD%E6%B1%9F'
>>>
另一個方法
#!/usr/bin/python
import urllib
import sys
string = sys.argv[1]
string = unicode(string,"gbk")
utf8_string = string.encode("utf-8")
gbk_string=string.encode("gbk")
gbk=urllib.quote(gbk_string)
utf8=urllib.quote(utf8_string)
print gbk
print utf8

❸ #Python爬蟲 如何將網址中的漢字轉換成16進制字元串

結果如下:

https://ke..com/item/%E5%8C%97%E4%BA%AC%E8%88%AA%E7%A9%BA%E8%88%AA%E5%A4%A9%E5%A4%A7%E5%AD%A6

https://ke..com/item/%E6%B8%85%E5%8D%8E%E5%A4%A7%E5%AD%A6

https://ke..com/item/%E6%AD%A6%E6%B1%89%E5%A4%A7%E5%AD%A6

https://ke..com/item/%E5%8D%8E%E4%B8%AD%E7%A7%91%E6%8A%80%E5%A4%A7%E5%AD%A6

❹ python utf8 gbk 編碼問題

你是不是想在python里把中文變成鏈接中%E5%BE%85這種形式?直接用urllib.urlencode({'word':'中文'})方法
而顯示\xe5\xbe\x85\是因為你沒有使用read()方法,加上後變成:'待解析網頁'.decode('gbk').encode('utf-8').read(),就是你熟悉的中文了。
不過,'待解析網頁'.decode('gbk').encode('utf-8')這句我要吐槽一下,網頁明顯是utf-8編碼,你在文件開頭聲明utf-8編碼就可以了,這一句是多餘的。在這基礎上讀取網頁直接用 '待解析網頁'.read()

❺ python 爬蟲中文編碼轉換出錯

importurllib
if__name__=='__main__':
enc=r"%C0%FA%CA%B7%C9%CF%C4%C7%D0%A9%C5%A3%C8%CB%C3%C7.pdf"
string=urllib.unquote(enc).decode('gb2312')
printtype(string),string

這是python2的,簡單點。只能幫這么多了。

❻ python 抓取的網頁鏈接,鏈接中的中文亂碼問題

應該是shell的編碼和listinfo編碼不一樣導致的,部分正常,部分亂碼有可能是因為兩種編碼部分字元恰好一樣。


試試

importsys
printi[i].encode(sys.getdefaultencoding())

❼ python url 編碼解碼

中文的gbk(GB2312)編碼: 一個漢字對應兩組%xx,即%xx%xx
中文的UTF-8編碼: 一個漢字對應三組%xx,即%xx%xx%xx

❽ url編碼問題在python中怎麼解決

最近在抓取一些js代碼產生的動態數據,需要模擬js請求獲得所需用的數據,遇到對url進行編碼和解碼的問題,就把遇到的問題總結一下,有總結才有進步,才能使學到的知識更加清晰。對url進行編碼和解碼,python提供了很方便的介面進行調用。

url中的query帶有特殊字元(不是url的保留字)時需要進行編碼。當url中帶有漢字時,需要特殊的處理才能正確編碼,以下都只針對這種情形,當然也適用於純英文字元的url。

(1) url編碼:

import urllib

url = 'wd=哈哈' #如果此網站編碼是gbk的話,需要進行解碼,從gbk解碼成unicode,再從Unicode編碼編碼為utf-8格式。

url = url.decode('gbk', 'replace')

print urllib.quote(url.encode('utf-8', 'replace'))

結果: 3a%2f%2ftest.com%2fs%3fwd%3d%e5%93%88%e5%93%88

(2) url解碼:

import urllib

encoded_url = est.com%2fs%3fwd%3d%e5%93%88%e5%93%88'

print urllib.unquote(encoded_url).decode('utf-8', 'replace').encode('gbk', 'replace') #反過來

函數調用的參數以及結果都是utf-8編碼的,所以在對url編碼時,需要將參數串的編碼從原始編碼轉換成utf-8,

對url解碼時,需要將解碼結果從utf-8轉換成原始編碼格式。

依據網站採用的編碼不同,或是gbk或是utf-8,賦賦予不同的編碼,進行不同的url轉碼。GBK格式,一個中文字元轉為%xx%xx,共兩組;utf-8格式,一個中文字元轉為%xx%xx%xx,共三組。

❾ python url編碼兩次怎麼結

面是中文的情況(比如『麗江'),url的地址編碼卻是'%E4%B8%BD%E6%B1%9F',因此需 要做一個轉換。這里我們就用到了模塊urllib。
?

1
2
3
4
5
6
7
8

>>> import urllib
>>> data = '麗江'
>>> print data
麗江
>>> data
'\xe4\xb8\xbd\xe6\xb1\x9f'

閱讀全文

與pythonurl漢字編碼相關的資料

熱點內容
武漢程序員的工資 瀏覽:152
奕劍術林奕 瀏覽:256
如何看app限制視頻 瀏覽:982
電影廁所持刀惡人 瀏覽:607
go to the cinema翻譯 瀏覽:843
主人公叫艾米麗是什麼電影 瀏覽:426
文件夾排序怎麼變成橫排了 瀏覽:690
一個男的看女生洗澡電影 瀏覽:292
虛擬幣充值源碼 瀏覽:87
我昨天看了航天電影英文翻譯 瀏覽:175
熙和宇電影高級家庭 瀏覽:236
主角10歲收了母親的小說 瀏覽:544
女獄電影日本 瀏覽:154
二龍湖浩哥最早的作品 瀏覽:699
異界收母入後宮 瀏覽:155
ida反編譯出來的代碼是匯編指令嗎 瀏覽:820
小孩子是天才的電影 瀏覽:450
輿情監控演算法 瀏覽:147
好看123電影 瀏覽:751
成龍主演的五行拳電影名字 瀏覽:954