2019年12月20日 星期五

客戶Linux語系與python中文編碼問題SOP

原因

本篇是因為客戶執行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-8LC_CTYPE=zh_TW.UTF-8
  1. 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="">
  2. 執行locale-gen
    (如果新加的語系在本機上沒有,就需要執行,例如原本是預設英文en_US.UTF-8,新增zh_TW.UTF-8)
  3. 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

沒有留言:

張貼留言

IKEA吊櫃廚櫃

 好不容易裝好IKEA買來的吊櫃,花了三天。 從組裝,鑽牆,上牆調水平,累死我了。