pythonunicode轉字元串
㈠ python 字元串格式的unicode編碼轉中文
python對於Unicode編碼可以使用decode進行轉換成中文:
>>> str = b'\xe8\xb4\xb9\xe8\x84\x91\xe5\xad\x90'
>>> str.decode('utf-8')
'費腦子'
如果是字元串類型的Unicode編碼沒辦法直接用decode進行轉換:
>>> str ="\\xe8\\xb4\\xb9\\xe8\\x84\\x91\\xe5\\xad\\x90"
>>> str.decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
AttributeError: 'str' object has no attribute 'decode'
處理方式:
>>> str = eval("b" + "\"" + str + "\"")
>>> str.decode('utf-8')
'費腦子'
㈡ python \u559c\u6b22\u4e00\u4e2a\u4eba 怎麼將這樣的字元串轉換成unicode的類型
1、定義一個字元串man,並列印該字元串結果值。

㈢ python怎麼把unicode碼轉漢字
普通字元串可以用多種方式編碼成Unicode字元串,具體要看你究竟選擇了哪種編碼: unicodestring = u"Hello world" # 將Unicode轉化為普通Python字元串:"encode" utf8string = unicodestring.encode("utf-8")
㈣ python中unicode字元串的問題
這個要看你在哪裡顯示,並且要知道你原來的是什麼編碼。一般用decode解碼成unicode,然後用encode編碼成你的顯示支持的。s.decode('utf-8').encode('gb2312') 就是把s從utf-8解碼成unicode的,然後再編碼成gb2312的。
㈤ Python字元串轉換成Unicode--比較好用的方法
將Python字元串轉換成Unicode
先用type函數確定一下是什麼編碼的
str編碼是"utf-8"
另外,
將Unicode轉換為其他編碼
㈥ Python 編碼轉換與中文處理
python 中的 unicode 是讓人很困惑、比較難以理解的問題. 這篇文章 寫的比較好, utf-8是 unicode的一種實現方式,unicode、gbk、gb2312是編碼字元集.
Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼范圍內的字元的時候就要使用" 編碼指示 "來修正一個 mole 的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明: # -*- coding=utf-8 -*- 或者 #coding=utf-8
其他的編碼如:gbk、gb2312也可以;否則會出現:
先說一下python中的字元串類型,在python中有兩種字元串類型,分別是 str 和 unicode ,他們都是basestring的派生類;
在str的文檔中有這樣的一句話:
也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。
unicode 轉為 gb2312,utf-8等,使用 encode(encoding)
utf-8,GBK轉換為 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)
普通的 str 轉為 unicode,
如果直接執行s.encode('gb2312')會發生什麼?
這里會發生一個異常:Python 會自動的先將 s 解碼為 unicode ,然後再編碼成 gb2312。因為解碼是python自動進行的,我們沒有指明解碼方式,python 就會使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 s 不是這個類型就會出錯。
拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯了:
對於這種情況,我們有兩種方法來改正錯誤:
s = '中文'
s.decode('utf-8').encode('gb2312') ```
import sys
reload(sys) # Python2.5 初始化後會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入
sys.setdefaultencoding('utf-8')
str = '中文'
str.encode('gb2312')
print open("Test.txt").read()
import codecs
print open("Test.txt").read().decode("utf-8")
Traceback (most recent call last):
File "ChineseTest.py", line 3, in <mole>
print open("Test.txt").read().decode("utf-8")
UnicodeEncodeError: 'gbk' codec can't encode character u'ufeff' in position 0: illegal multibyte sequence
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")
s = "中文"
print unicode(s, "utf-8")
Traceback (most recent call last):
File "ChineseTest.py", line 3, in <mole>
s = unicode(s, "utf-8")
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data
s = "中文"
print unicode(s, "gbk")
s = "中文"
print unicode(s, "cp936")
㈦ python中怎樣將unicode轉換成原來的中文
python默認就是unicode存儲。如果是從文件讀取的,在open的參數中指定encoding關鍵字參數就行。如下:
#coding=utf-8/importjson /defLoadQuestion(): /f=open("test.json",'r') qas=json.load(f) question=qas['documents'] /returnquestion/t=LoadQuestion() /printstr(t).decode("unicode-escape")

拓展資料:
通常python2時所有IO讀寫都是byte方式。也就是編碼後的。java也是這樣子。只有python3還有某些特定的模塊才會自動將byte重新轉換成unicode
在python2里的確可以使用s.decode('gbk','ignore')之類的變成unicode。不過在python3里應該是這樣子, s.encode('gbk','ignore')這樣就變成了byte
如果你喜歡 utf-8,可以s.encode(『utf-8','ignore')和s.decode(『utf-8','ignore')
㈧ Python如何將Unicode中文字元串轉換成 string字元串
普通字元串可以用多種方式編碼成Unicode字元串,具體要看你究竟選擇了哪種編碼:
unicodestring
=
u"Hello
world"
#
將Unicode轉化為普通Python字元串:"encode"
utf8string
=
unicodestring.encode("utf-8")
asciistring
=
unicodestring.encode("ascii")
isostring
=
unicodestring.encode("ISO-8859-1")
utf16string
=
unicodestring.encode("utf-16")
#
將普通Python字元串轉化為Unicode:"decode"
plainstring1
=
unicode(utf8string,
"utf-8")
plainstring2
=
unicode(asciistring,
"ascii")
plainstring3
=
unicode(isostring,
"ISO-8859-1")
plainstring4
=
unicode(utf16string,
"utf-16")
assert
plainstring1
==
plainstring2
==
plainstring3
==
plainstring4
㈨ 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,將字元串轉化為 \u XXXX 的字元串(unicode)
print(u'你好'.__repr__())
