PageRank



轉移公告

計劃把 http://blog.hoamon.info/ 文章全部轉移至 http://www.hoamon.info/blog/ 這裡,而本 Blogger 站台的文章近 500 篇,我預計在 2014-12-31 前移轉完畢,完成後 http://blog.hoamon.info/ 將只作代轉服務,一律把舊連結如 http://blog.hoamon.info/index.html 轉成 http://www.hoamon.info/blog/index.html ,敬請舊雨新知互相走告。

新文章只發佈在 http://www.hoamon.info/blog/

何岳峰 敬上

2008年5月5日 星期一

Python 不支援 Big5 擴充字(誤)

"""README: 感謝使徒提姆,我居然天真地以為 Python 沒有作到 Localization 。下面第一段文是我在放屁,請見諒! 就把此文當作是 os.popen 的一段小範例吧! """

有 7 個 Big5 擴充字:碁, 銹, 裏, 墻, 恒, 粧, 嫺,無法透過 Python 的 unicode 函式作轉換。所以我只好呼叫外部 iconv 程式來作轉換。

一開始,我選用 os.system 來作轉換,但 os.system 的所得到的回傳值是 subshell 執行程式的狀態,而不是轉換後的 utf8 碼,後來就改用 os.popen 。

程式範例如下:
try:
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')
一開始先嘗試用 unicode 函式轉換,不成功後才使用 os.popen ,並將 stderr 的訊息轉到 stdout 去,如果在得到的回傳值中發現了 iconv: 的字串,則再使用 unicode 函式作『錯誤 ignore 』的轉換。

這樣就能兼顧程式效率及轉換正確率了。

3 則留言:

  1. 人家這裡有個純py的codec, 雖然很破, 但是可以用 :p
    http://www.andcycle.idv.tw/~andcycle/work/BahaDump/lib/big5ext.py

    回覆刪除
  2. python不是不支援,big5擴充字要用cp950. unicode(str(v), 'cp950')即可.

    回覆刪除
  3. 感謝使徒提姆的指正,謝謝。

    回覆刪除

Related Posts Plugin for WordPress, Blogger...