有 7 個 Big5 擴充字:碁, 銹, 裏, 墻, 恒, 粧, 嫺,無法透過 Python 的 unicode 函式作轉換。所以我只好呼叫外部 iconv 程式來作轉換。
一開始,我選用 os.system 來作轉換,但 os.system 的所得到的回傳值是 subshell 執行程式的狀態,而不是轉換後的 utf8 碼,後來就改用 os.popen 。
程式範例如下:
try:一開始先嘗試用 unicode 函式轉換,不成功後才使用 os.popen ,並將 stderr 的訊息轉到 stdout 去,如果在得到的回傳值中發現了 iconv: 的字串,則再使用 unicode 函式作『錯誤 ignore 』的轉換。
value = unicode(str(v), 'big5')
except:
value = os.popen('echo "%s"|iconv -f big5 -t utf8 2>&1' % v.replace('`', "'").replace('\n', '')).read().replace('\n', '')
if 'iconv: ' in value: value = unicode(str(v), 'big5', 'ignore')
這樣就能兼顧程式效率及轉換正確率了。
人家這裡有個純py的codec, 雖然很破, 但是可以用 :p
回覆刪除http://www.andcycle.idv.tw/~andcycle/work/BahaDump/lib/big5ext.py
python不是不支援,big5擴充字要用cp950. unicode(str(v), 'cp950')即可.
回覆刪除感謝使徒提姆的指正,謝謝。
回覆刪除