原因
本篇是因為客戶執行USB驗證時,執行到
usb_license.getClientName(101)
,程式出現錯誤訊息:UnicodeEncodeError: 'ascii' codec can't encode characters ....
原因是客戶的Linux語系設定有問題,因為回傳的是"某某單位"中文字的UTF8的16進位編碼,python會使用系統預設編碼來解釋讀進來的字串,故解碼失敗。若在Linux執行
locale
,出現:locale: Cannot set LC_CTYPE to default locale: No such file or directory
則python會使用自己的ascii編碼,故中文一定解不出來。
方法
本篇是完整修改Linux語系,重開機也不會還原,若只要修改當下運作時的語系,請執行
LANG=zh_TW.UTF-8
及LC_CTYPE=zh_TW.UTF-8
。sudo vim /var/lib/locales/supported.d/en
<-- br="" en="" local="">新增放置在第一行zh_TW.UTF-8 UTF-8
<-- br="">(en_US.UTF-8 UTF-8
<-- p="">-->-->-->- 執行
locale-gen
(如果新加的語系在本機上沒有,就需要執行,例如原本是預設英文en_US.UTF-8,新增zh_TW.UTF-8) vim /etc/default/locale
修改LANG=zh_TW.UTF-8
其它
執行
locale
看看,若前三行出現:locale: Cannot set LC_CTYPE to default locale: No such file or directory
,表示第二步驟沒執行,或第一步驟的語系設定打錯。
本篇測試的環境是Ubuntu 16.04
沒有留言:
張貼留言