最近遇到一個(gè)問(wèn)題,新建的一個(gè)鏡像里面跑的代碼無(wú)法支持中文。錯(cuò)誤如下:
'ascii' codec can't encode character '\u82b1' in position 0: ordinal not in range(128)
1姑荷、代碼encoding
第一反應(yīng)是代碼里面沒(méi)有做好中文的encoding财忽,但仔細(xì)檢查之后發(fā)現(xiàn)代碼沒(méi)有問(wèn)題猪钮,并且代碼在其他環(huán)境上是能跑的
2党饮、鏡像打入的包版本不對(duì)
又看了一下鏡像里打入的依賴(lài)包,和我在其他機(jī)器上用的不一樣友酱,有可能包版本導(dǎo)致的晴音,雖然可能性不大,只能硬著頭皮試一下缔杉,over
3锤躁、python里輸入輸出語(yǔ)言編碼不對(duì)
好吧,都懷疑到python上了或详,主要看看python中調(diào)用了什么系統(tǒng)編碼
oh系羞, 貌似設(shè)置也沒(méi)啥問(wèn)題
4、系統(tǒng)LC_ALL設(shè)置
細(xì)看錯(cuò)誤'ascii' codec can't encode character '\u82b1' in position 0霸琴,代碼中椒振、python設(shè)置無(wú)論哪里都沒(méi)有設(shè)置ascii編碼,可以猜測(cè)在執(zhí)行到這一步的時(shí)候梧乘,默認(rèn)采用了ascii編碼澎迎,只能想到系統(tǒng)語(yǔ)言設(shè)置上去了,果然是這樣的宋下。
LC_ALL實(shí)際包含12個(gè)LC_*的設(shè)置
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
對(duì)嗡善,就要要設(shè)置這個(gè)東西辑莫,設(shè)置的辦法網(wǎng)上很多学歧,正常只需要export LC_ALL="en_US.UTF-8"
, 若出現(xiàn)
bash: warning: setlocale: LC_ALL: cannot change locale (en_AU.UTF-8)
錯(cuò)誤各吨,可以按下面這樣配置枝笨。
locale-gen "en_US.UTF-8"
dpkg-reconfigure locales
export LC_ALL="en_US.UTF-8"
完事,這是設(shè)置系統(tǒng)的默認(rèn)語(yǔ)言和編碼方式揭蜒。
這是根音根音根音
done