pythonstr轉unicode
⑴ 了解python中bytes,str和unicode的區別
str是經過編好碼的字元串,如unicode,gb2312,ascii編碼,可以表示不同語言中的字元,可以解碼成byte byte是位元組,只能是ascii碼0-255的字元,表示未經編碼處理的原始字元串
⑵ python3如何把字元串轉換成系統默認編碼
python 3和2很大區別就是python本身改為默認用unicode編碼。
字元串不再區分"abc"和u"abc", 字元串"abc"默認就是unicode,不再代表本地編碼、
由於有這種內部編碼,像c#和java類似,再沒有必要在語言環境內做類似設置編碼,比如「sys.setdefaultencoding」;
也因此也python 3的代碼和包管理上打破了和2.x的兼容。2.x的擴展包要適應這種情況改寫。
另一個問題是語言環境內只有unicode怎麼輸出gbk之類的本地編碼。
答按慣例都在(序列化)輸出時才轉換成本地編碼。
比如
1
file.write("GBK的中文".encode("GBK"))
python環境內字元串用str.encode("GBK")方法輸出成位元組串用於和其他環境交流。
⑶ python 讀取的中文怎麼使用
file = open('filename.txt','r')
text = file.read() #讀取所有文字
text = file.readline() #讀取一行文字
text = file.readlinse() #把每一行變成list的一個元素
如果需要裡面中文的話,用正則匹配
⑷ 如何理解python3的unicode,以及全形半形轉換
1. unicode是一個編碼的standard,表明了字元與數字之間的映射,是可變長的。
2. 映射後的數據如何編碼為位元組?這個就是具體的編碼規則:目前最主流的是UTF-8,同樣,它也是變字長的。
python3中的str都是unicode的:「The default encoding for Python source code is UTF-8」
python3中的encode:按照encode()括弧中的參數對字元串進行編碼,就是生成bytes。
所以:
In:'中文'.encode('utf-8')
Out:b'\xe4\xb8\xad\xe6\x96\x87'
這里的b就是Byte,\x表示這個x是被轉義的,意思就是0x。又如:
In: 'abc'.encode('utf-8')
Out: b'abc'
上面的b'a'其實表示的是數字97,b'a'的意思就是字元串'a'的binary數字:
[In]:'abc'.encode('utf-8')[0]
[Out]: 97
同時可以把b'\x'進行解碼,即:
In:b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
Out:'中文'
除了encode('utf-8')外,用ord可以獲得單個utf-8字元對應的數字:
In [60]: ord('a')
Out[60]: 97
In [61]: ord('a')#這個是全形的a
Out[61]: 65345
除了decode('utf-8')外,用chr可以獲得數字對應的utf-8字元:
In [62]: chr(97)
Out[62]: 'a'
除了unicode還有別的編碼標准嗎?有啊,比如我國的GBK,別名也叫cp936。
全形和半形之分,是指同樣一個意義的字元,顯示的大小不同.具體來說,全形和半形的編碼是兩個結果:
In [70]: "mn".encode('utf-8')
Out[70]: b'\xef\xbd\x8d\xef\xbd\x8e
[In]:"mn".encode('utf-8')
[Out]:b'mn'
它們有什麼對應關系呢?(引自這里)
轉換說明
全形半形轉換說明
有規律(不含空格):
全形字元unicode編碼從65281~65374 (十六進制 0xFF01 ~ 0xFF5E)
半形字元unicode編碼從33~126 (十六進制 0x21~ 0x7E)
特例:
空格比較特殊,全形為 12288(0x3000),半形為 32(0x20)
除空格外,全形/半形按unicode編碼排序在順序上是對應的(半形 + 0x7e= 全形),所以可以直接通過用+-法來處理非空格數據,對空格單獨處理。
代碼在此基礎上改動一下(將unichr改為chr即可,適應python3),即:
def strQ2B(ustring):
"""全形轉半形"""
rstring = ""
for uchar in ustring:
inside_code=ord(uchar)
if inside_code == 12288: #全形空格直接轉換
inside_code = 32
elif (inside_code >= 65281 and inside_code <= 65374): #全形字元(除空格)根據關系轉化
inside_code -= 65248
rstring += chr(inside_code)
return rstring
In [69]: strQ2B('你好python')
Out[69]: '你好python'
⑸ python 怎麼把字元轉換為unicode編碼
decode的作用是將其他編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串轉換成unicode編碼。
encode的作用是將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unicode編碼的字元串轉換成gb2312編碼。
⑹ python 任何字元轉unicode
可以使用encode方法,參數填「utf-8」
⑺ python \u559c\u6b22\u4e00\u4e2a\u4eba 怎麼將這樣的字元串轉換成unicode的類型
1、定義一個字元串man,並列印該字元串結果值。
⑻ Python中中文字元串怎麼處理
如果處理的字元串中出現中文表示的字元,要想不出錯,就得轉成unicode編碼了。具體的方法有:
1、decode(),將其他邊編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串str1轉換成unicode編碼;
2、encode(),將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unicode編碼的字元串str2轉換成gb2312編碼;
3、unicode(),同decode(),將其他編碼的字元串轉換成unicode編碼,如unicode(str3, 'gb2312'),表示將gb2312編碼的字元串str3轉換成unicode編碼。
轉碼的時候一定要先搞明白字元串str是什麼編碼,然後decode成unicode,最後再encode成其他編碼。
另外,對一個unicode編碼的字元串在進行解碼會出錯,所以在編碼未知的情況下要先判斷其編碼方式是否為unicode,可以用isinstance(str, unicode)。
不僅是中文,以後處理含非ascii編碼的字元串時,都可以遵循以下步驟:
1、確定源字元的編碼格式,假設是utf8;
2、使用unicode()或decode()轉換成unicode編碼,如str1.decode('utf8'),或者unicode(str1, 'utf8');
3、把處理後字元串用encode()編碼成指定格式。
⑼ 怎麼在Python里使用UTF-8編碼
概述
在python代碼即.py文件的頭部聲明即可
解析
py文件中的編碼
Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼范圍內的字元的時候就要使用"編碼指示"來修正一個 mole 的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明:
# -*- coding=utf-8 -*-
#coding=utf-8
# 以上兩種選其一即可
其他的編碼如:gbk、gb2312也可以;否則會出現:
SyntaxError: Non-ASCII character 'xe4' in file test.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
python中的編碼與解碼
先說一下python中的字元串類型,在python中有兩種字元串類型,分別是 str 和 unicode,他們都是basestring的派生類;
str類型是一個包含Characters represent (at least) 8-bit bytes的序列;
unicode 的每個 unit 是一個 unicode obj;
在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等。
拓展內容
utf-8編碼
UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字元編碼,也是一種前綴碼。它可以用來表示Unicode標准中的任何字元,且其編碼中的第一個位元組仍與ASCII兼容,這使得原來處理ASCII字元的軟體無須或只須做少部分修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或發送文字的應用中,優先採用的編碼。
UTF-8使用一至六個位元組為每個字元編碼(盡管如此,2003年11月UTF-8被RFC 3629重新規范,只能使用原來Unicode定義的區域,U+0000到U+10FFFF,也就是說最多四個位元組):
1、128個US-ASCII字元只需一個位元組編碼(Unicode范圍由U+0000至U+007F)。
2、帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要兩個位元組編碼(Unicode范圍由U+0080至U+07FF)。
3、其他基本多文種平面(BMP)中的字元(這包含了大部分常用字,如大部分的漢字)使用三個位元組編碼(Unicode范圍由U+0800至U+FFFF)。
4、其他極少使用的Unicode輔助平面的字元使用四至六位元組編碼(Unicode范圍由U+10000至U+1FFFFF使用四位元組,Unicode范圍由U+200000至U+3FFFFFF使用五位元組,Unicode范圍由U+4000000至U+7FFFFFFF使用六位元組)。
對上述提及的第四種字元而言,UTF-8使用四至六個位元組來編碼似乎太耗費資源了。但UTF-8對所有常用的字元都可以用三個位元組表示,而且它的另一種選擇,UTF-16編碼,對前述的第四種字元同樣需要四個位元組來編碼,所以要決定UTF-8或UTF-16哪種編碼比較有效率,還要視所使用的字元的分布范圍而定。不過,如果使用一些傳統的壓縮系統,比如DEFLATE,則這些不同編碼系統間的的差異就變得微不足道了。若顧及傳統壓縮演算法在壓縮較短文字上的效果不大,可以考慮使用Unicode標准壓縮格式(SCSU)。
互聯網工程工作小組(IETF)要求所有互聯網協議都必須支持UTF-8編碼。互聯網郵件聯盟(IMC)建議所有電子郵件軟體都支持UTF-8編碼。