程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> Python處理中文的時候的一些小技巧

Python處理中文的時候的一些小技巧

編輯:Python

相信第一次處理中文的朋友們可能都會對中文的encoding 和程序的報錯很頭疼。

如果你像我一樣希望能夠把事情盡快做好而不去深究,你可能會寫一些異常處理的代碼把 UnicodeEncodingError糊弄過去先,但當你開始懷疑有多少encoding出錯的信息被你丟棄的時候,可能你會很驚奇。於是,你還是會想坐下來,(洗把臉)然後面對自己必須弄懂什麼是utf-8,什麼是 ‘gb2312’, 什麼是 ‘gbk’ 和其中的貓膩。正如有時候猛撕小傷口上邦迪膠布的快感一樣,有時候當你認真面對一些你平時一直回避的問題的時候(其實有時候需要的不是勇氣), 你反而會覺得“不過如此”,並且能夠一勞永逸的解決問題。

關於Python處理Unicode,我所能找到的最言簡意赅的入門教程是:

Unicode In Python, Completely Demystified (揭秘Python Unicode)

 

 

簡要羅列一下最重要最實用的點:

 

Solution

  1. Decode early (盡早decode, 將文件中的內容轉化成 unicode 再進行下一步處理)
  2. Unicode everywhere (程序內部處理都用unicode)
  3. Encode late (最後encode回所需的encoding, 例如把最終結果寫進結果文件)

1. Decode early

Decode to <type ‘unicode’> ASAP

>>> def to_unicode_or_bust(

…         obj, encoding=’utf-8′):

…     if isinstance(obj, basestring):

…         if not isinstance(obj, unicode):

…             obj = unicode(obj, encoding)

…     return obj

>>>

detects if object is a string and if so converts to unicode, if not already.

2. Unicode everywhere

>>> to_unicode_or_bust(ivan_uni)

u’Ivan Krsti\u0107′

>>> to_unicode_or_bust(ivan_utf8)

u’Ivan Krsti\u0107′

>>> to_unicode_or_bust(1234)

1234

3. Encode late

Encode to <type ‘str’> when you write to disk or print

>>> f = open(‘/tmp/ivan_out.txt’,’w’)

>>> f.write(ivan_uni.encode(‘utf-8′))

>>> f.close()

我以前一直覺得unicode相關的處理都是很 dirty 的工作,一般都會一邊嘗試,一邊用異常處理去補丁,看完以上這個教程以後豁然開朗。

祝大家也能早日理清處理中文的時候的頭緒,坦然直面“神秘”的unicode

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved