pythonunicode中文
❶ python2.7 中文字元編碼,使用Unicode時,選擇什麼編碼格式
關於編碼和亂碼的問題,我簡單講一下。
通常問這類問題的人是混淆了若干個不同的概念,並且他們自己也沒有意識到自己混淆了這些概念的。
終端顯示字元的編碼(windows下終端是cmd,linux下是各種terminal,遠程登錄是putty或者xshell)
shell環境的編碼。比如中文版windows用的是gbk(向下兼容gb2312),大多數linux發行版使用的是utf-8(LANG=zh_CN.UTF-8)。
文本文件的編碼。這個通常取決於你的編輯器,而且有的編輯器支持多種編碼的話,你可以在文本開頭位置指定編輯器使用特定編碼。比如# -*- coding: utf8 -*-,vim看到這行會默認將這個腳本認定為utf-8兼容編碼格式。
應用程序的內部編碼。一個字元串,作為數據只是一個位元組數組,但是作為字元的數組,就有一個解析方式。java和python的內部字元編碼是utf-16,python和java都支持用不同的編碼來對位元組數組進行decode來得到字元數組。
題主現在弄了一個文件,在開始加上了
# -*- coding: utf8 -*-
這下編輯器看到了,知道這文件是utf-8的了。所以編輯器對讀入的一坨坨位元組用utf-8來解碼,對於輸出到磁碟的漢字也用utf-8來編碼。所以你在文件裡面看到的看上去像「漢字」的東西,就和第一種情況下想同了,當然代碼就跑得通。
順便說一下,如果編輯器無視行首這行編碼聲明,或者編輯器無法支持utf-8格式,那麼你弄好的文件在那個編輯器下就會顯示亂碼,多麼簡單的道理啊。- 所以,要能夠正常的顯示中文(或者其他什麼亂七八糟奇葩的多位元組文字),以下條件缺一不可:
終端和環境的編碼一致(本機通常是一致的,不一致常常出現在遠程登錄);如果不一致就需要有編輯器或者文本閱讀器做一個兼容兩者的轉換。
編輯器能夠認識文本編碼
系統擁有能顯示這種字元的字體。
拿題主的問題來解釋一下。
我在ubuntu kylin中文環境下默認terminal中做了同樣的實驗,但是結果和題主恰好相反:
這個實際上是gbk(兼容gb2312)的字元「漢字」的真實位元組數組。這個實際上是gbk(兼容gb2312)的字元「漢字」的真實位元組數組。
所以對這坨數據做unicode("漢字","utf8")會失敗——因為不管你怎麼想,雖然看上去是一樣,但是實際上不是同一坨東西啊!
這也就是我為什麼一直反對在程序文本中使用除ascii之外的所有編碼字元的原因。環境太復雜了,繞開問題遠比解決問題輕松。
❷ 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 中的 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')
❺ python2 怎麼將unicode編碼轉成中文
1、python2與python3稍微有點區別
2、python2中默認的字元編碼格式都是unicode,在字元串前加'u',表示unicode 編碼
3、將unicode轉換成中文,只需要用deconde解碼就可以了!
❻ 怎麼將python所有unicode轉換成中文格式
中文格式就是utf8唄
In[1]:s=u"中國"
In[2]:s
Out[2]:u'u4e256fd'
In[3]:new=s.encode("utf8")
In[4]:printnew
中國
In[5]:new
Out[5]:'xe4xb8xadxe5x9bxbd'
In[6]:
如果解決了您的問題請採納!
如果未解決請繼續追問
❼ python中如何列印或保存unicode編碼內容成中文
使用decode(「unicode-escape」)
例如:
string="u73bbu7483"
printstring.decode("unicode-escape")
❽ 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如何將Unicode中文字元串轉換成 string字元串
Unicode字元串可以用多種方式編碼為普通字元串,假設unicodestring = u"Hello world",依照所選擇的編碼(encoding),如下:
1、#將Unicode轉換成普通的Python字元串:"編碼(encode)"。
(9)pythonunicode中文擴展閱讀:
Python轉換字元和字元串的原因:為了處理不適合用ASCII字元集表示的數據。
在以ASCII碼為中心的語言和環境中,位元組和字元被當做相同的事物。由於一個位元組只能有256個值,這些環境就受限為只支持256個字元Unicode碼,另一方面,有數萬個字元,那意謂著每個Unicode字元佔用多個位元組,因此,你需要在字元和位元組之間作出區別。
(1)UTF-8編碼能處理任何的Unicode字元。它也是與ASCII碼向後兼容的,因此一個純粹的ASCII碼文件也能被考慮為一個UTF-8文件,而且一個碰巧只使用ASCII碼字元的 UTF-8文件和擁有同樣字元的ASCII碼文含歷件是相同的。
這個特性使得UTF-8的向後兼容性非常好,尤其使用較舊的Unix工具時。UTF-8 無疑地是在 Unix上的占優勢的編碼。它主要的弱點是對東方文字是非常低效的。
(2)UTF-16編碼在微軟的操作系統和Java環境下受到偏愛。它對西方語言是比較低效,但對於東方語言是更有效率的。一個UTF-16 的變體有時叫作UCS-2 。
(3)ISO-8859編碼系列是256個字元的ASCII碼的超集。他談謹搜們不能夠支援所有的Unicode碼字元;他們只能支援一些特別的語言或語言家族。
ISO-8859-1,也既Latin-1,包括大多數的西歐和非洲語言,但是不含阿拉伯語。ISO-8859-2,也既Latin-2,包括許多東歐的語言,像是匈牙利語和波蘭語。