python3编码问题_python3编码问题
Python3默認編碼是unicode
而Python2是ASCII碼
Windows環境默認是gbk編碼
Python3 自動把文件編碼轉為unicode,Python2并不會自動的把文件編碼轉為unicode存在內存里。需要手動轉碼。
python3的執行過程: 解釋器找到代碼文件,把代碼字符串按文件頭定義的編碼加載到內存,轉成unicode
把代碼字符串按照語法規則進行解釋
所有的變量字符都會以unicode編碼聲明
UTF-8 --> decode 解碼 --> Unicode
Unicode --> encode 編碼 --> GBK / UTF-8 等 a = '編碼' # a是unicode類型
b = a.encode('utf-8') # b是utf-8類型
c = a.encode('gbk') #c是gbk類型
print (a , b ,c)
print (type(a),type(b),type(c))
#python3默認是unicode類型
編碼 b'\xe7\xbc\x96\xe7\xa0\x81' b'\xb1\xe0\xc2\xeb'
Decode的作用是將其他編碼的字符串轉換成unicode編碼
如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。
Encode的作用是將unicode編碼轉換成其他編碼的字符串,
如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉換成gb2312編碼。
已經知道在python3中,輸出的時候,會把str/Unicode 變成utf8的編碼;來看一下環境中的輸出編碼是什么: import sys
sys.stdout.encoding
在最新的python 3版本中,字符串的類型是str, 在內存中都是以Unicode表示,一個字符對應若干個字節;
如果要在網絡上傳輸,或者保存到磁盤上,就需要把str變為以字節為單位的bytes。
以Unicode表示的str通過encode()方法可以編碼為指定的bytes,例如: >>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
File "", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
在操作字符串時,我們經常遇到str和bytes的互相轉換。為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。
總結
以上是生活随笔為你收集整理的python3编码问题_python3编码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go语言调用python_Golang中
- 下一篇: python解释器的提示符是shell嘛