首先檢查系統默認編碼和終端編碼是否為UTF-8(現代CentOS系統默認使用UTF-8,但可能因配置修改而變化)。
python3 -c "import sys; print(sys.getdefaultencoding())"
,若輸出不是utf-8
,需調整系統編碼。locale
命令,檢查LANG
、LC_CTYPE
等變量的值是否包含UTF-8
(如en_US.UTF-8
或zh_CN.UTF-8
)。若系統或終端編碼不是UTF-8,需修改環境變量配置文件(以當前用戶為例):
~/.bashrc
文件(全局配置可編輯/etc/profile
):vi ~/.bashrc
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
source ~/.bashrc
使設置立即生效。為避免Python解釋器因默認編碼(Python 2為ASCII,Python 3為UTF-8但需顯式聲明非ASCII字符)導致的亂碼,需在腳本開頭添加編碼聲明:
# -*- coding: utf-8 -*-
(或#coding=utf-8
),否則無法識別中文注釋或字符串。在讀寫文件時,務必指定encoding='utf-8'
,避免依賴系統默認編碼(可能為ASCII或其他格式):
with open('chinese.txt', 'r', encoding='utf-8') as f:
content = f.read()
with open('output.txt', 'w', encoding='utf-8') as f:
f.write("你好,世界!")
import sys
sys.stdin.reconfigure(encoding='utf-8')
sys.stdout.reconfigure(encoding='utf-8')
若遇到未知編碼的字符串(如從文件、網絡獲取的字節流),可使用chardet
庫檢測編碼并轉換:
chardet
:pip install chardet
import chardet
raw_data = b'\xe4\xbd\xa0\xe5\xa5\xbd' # 假設是未知編碼的字節流
result = chardet.detect(raw_data)
encoding = result['encoding']
decoded_str = raw_data.decode(encoding)
print(decoded_str) # 輸出:你好
Python 2已于2020年停止支持,默認編碼為ASCII,處理中文等非ASCII字符時問題較多;Python 3默認使用Unicode(str
類型),對UTF-8的支持更完善,能有效減少編碼問題。升級方法可參考CentOS官方文檔或Python官方升級指南。
若終端仍顯示亂碼(如方框或問號),可能是缺少中文字體。安裝文泉驛正黑字體(常用中文字體):
sudo yum install -y wqy-zenhei-fonts
安裝后重啟終端,中文應能正常顯示。
通過以上步驟,可覆蓋CentOS下Python編碼問題的常見場景(源代碼、文件IO、終端輸出、未知編碼等),確保中文等非ASCII字符正確處理。