(python 【print中文字符串編碼問題】 " 'ascii' codec can't encode characters in position......."

python 查詢當前環境下默認字符編碼

在python中,操作中文字符串時經常會出現字符編碼錯誤的情況。大部分問題是由於當前環境默認字符編碼是ascii的問題(尤其是3版本以前的python)。
以下是查詢當前環境默認字符編碼的語句。

1.當前文件的編碼格式

# -*- encoding==utf-8 -*-

在python3之前經常每個.py文件的第一行都會看到這個,它的實際作用是將當前py文件的編碼格式設置爲utf-8,如果沒有這一行註釋代碼, 那麼在執行當前的.py文件時候,只要該.py文件中有中文漢字就會ascii報錯。
內容

2. 當前系統使用的默認編碼

import sys
>>>sys.getdefaultencoding()       
'ascii'

python27版本中,當前環境的默認編碼爲ascii,每當你創建一個字符串str對象時,它的編碼格式爲默認的ascii格式。 可以用以下語句查詢字符串的編碼。

import chardet
a = '測試'
chardet.detect(a)

如果在執行字符串操作時候報了相關的ascii 錯誤,可以在該文件中添加以下語句,使當前系統的默認編碼修改爲utf-8;

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

python3之後的版本不需要,已經默認字符編碼是utf-8

3. 標準輸出默認編碼 針對print()時候報的ascii錯

>>>sys.stdout.encoding
'UTF-8'

在print一個中文字符串時候有時候也會報ascii的編碼錯誤,這時候需要注意查看一下標準輸出的默認字符編碼是否不是utf-8 (一般所有的python環境標準輸出的字符編碼都是默認的utf-8,我在使用docker基於ubuntu16版本裝的python35上鬼一樣遇到這種問題了)
如果不是utf-8,就在該文件下加入以下內容:

import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章