linux python運(yùn)行報(bào)編碼錯(cuò)誤

一次重啟服務(wù)器后,supervisor接管的python腳本中的函數(shù)open()print()都會(huì)報(bào)下面的編碼錯(cuò)誤:
UnicodeEncodeError: 'ascii' codec can't encode

使用的是python3,按理說編碼都會(huì)默認(rèn)utf-8,而且本地運(yùn)行的python腳本并沒有這個(gè)問題。

經(jīng)大佬指點(diǎn),增加環(huán)境變量export LC_ALL="en_US.UTF-8"后,再重啟supervisor,問題解決

LC_ALL相關(guān)信息:

下面是復(fù)制的:https://www.cnblogs.com/badboy200800/p/11215981.html

1.Locale說明

Locale是一個(gè)軟件在運(yùn)行時(shí)的語言環(huán)境,。是根據(jù)計(jì)算機(jī)用戶所使用的語言,所在國家或者地區(qū),以及當(dāng)?shù)氐奈幕瘋鹘y(tǒng)所定義的。它包括語言(Language), 地域 (Territory) 和字符集(Codeset)。

一個(gè)locale的書寫格式為: 語言[地域[.字符集]]。完全的locale表達(dá)方式是 [語言[地域][.字符集] [@修正值]。例如:

zh_CN.GB2312 => 中文_中華人民共和國+國標(biāo)2312字符集。

2.Locale查看

(1)locale把按照所涉及到的文化傳統(tǒng)的各個(gè)方面分成12個(gè)大類

[root@TDExpress1620_Sles11:~]$ locale 
LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" #語言符號(hào)及其分類
LC_NUMERIC="en_US.UTF-8" #數(shù)字
LC_TIME="en_US.UTF-8" #時(shí)間顯示格式
LC_COLLATE="en_US.UTF-8" #比較和排序習(xí)慣
LC_MONETARY="en_US.UTF-8" #貨幣單位
LC_MESSAGES="en_US.UTF-8" #信息主要是提示信息,錯(cuò)誤信息,狀態(tài)信息,標(biāo)題,標(biāo)簽,按鈕和菜單等
LC_PAPER="en_US.UTF-8" #默認(rèn)紙張尺寸大小
LC_NAME="en_US.UTF-8" #姓名書寫方式
LC_ADDRESS="en_US.UTF-8" #地址書寫方式
LC_TELEPHONE="en_US.UTF-8" #電話號(hào)碼書寫方式
LC_MEASUREMENT="en_US.UTF-8" #度量衡表達(dá)方式 
LC_IDENTIFICATION="en_US.UTF-8" #對(duì)locale自身包含信息的概述
LC_ALL=en_US.UTF-8 </pre>

(2)查看標(biāo)準(zhǔn)字符集列表

[root@TDExpress1620_Sles11:~]$ locale -a
zh_CN
zh_CN.gb18030
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.utf8
zh_SG
zh_SG.gbk
zh_SG.utf8
zh_TW
zh_TW.euctw
zh_TW.utf8
zu_ZA
zu_ZA.utf8</pre>

常用字符集:en_US.utf8、zh_CN.gb2312、zh_CN.gbk、zh_CN.utf8等

3.Locale的設(shè)定

LC_ALL和LANG優(yōu)先級(jí)的關(guān)系:LC_ALL > LC_* >LANG
(1)如果需要一個(gè)純中文的系統(tǒng)的話,設(shè)定LC_ALL= zh_CN.XXXX即可?;蛘咴O(shè)定LANG=zh_CN.XXXX也可以,但是LC_不要有任何特殊設(shè)定才可以(因?yàn)長C_優(yōu)先級(jí)高)。
(2)如果需要個(gè)性化的環(huán)境,例如只想要一個(gè)可以輸入中文的環(huán)境,而保持菜單、標(biāo)題,系統(tǒng)信息等等為英文界面,那么只需要設(shè)定LANG=en_US.XXXX,然后 LC_CTYPE=zh_CN.XXXX就可以了。
(3)假如什么也不做的話,也就是LC_ALL,LANG和LC_*均不指定特定值的話,系統(tǒng)將采用POSIX作為lcoale,也就是C locale。

4.查看與設(shè)定字符集實(shí)踐

(1)查看當(dāng)前系統(tǒng)字符集三種方式(LC_ALL、LC_CTYPE和LANG),以查看LANG為例:

[root@TDExpress1620_Sles11:~]$  echo $LANG
en_US.UTF-8 [root@TDExpress1620_Sles11:~]$ env |grep -i LANG
LANG=en_US.UTF-8 [root@TDExpress1620_Sles11:~]$ locale |grep -i LANG
LANG=en_US.UTF-8</pre>

(2)更改系統(tǒng)字符集

export LANG=<字符集名稱>
或者
export LC_ALL=<字符集名稱>

備注:直接執(zhí)行上述命令,可以臨時(shí)修改系統(tǒng)字符集。如果寫入環(huán)境變量可以永久改變字符集。

(3)取消當(dāng)前系統(tǒng)字符集(設(shè)定為空)

unset LANG

備注:直接執(zhí)行上述命令,可以臨時(shí)修改系統(tǒng)字符集。如果寫入環(huán)境變量可以永久改變字符集。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容