我正在使用以latin1編碼的外部數據。所以我添加sitecustomize.py
,並在其中加入在Python中設置隱式默認編碼解碼錯誤處理
sys.setdefaultencoding('latin_1')
果然,現在的latin1字符串處理工作正常。
但是,萬一我碰到的東西,是不是在LATIN1編碼:
s=str(u'abc\u2013')
我得到UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 3: ordinal not in range(256)
我想那是什麼不可解碼字符會被簡單地忽略,即我會得到在上面的示例s=='abc?'
中,並且每次都沒有明確地調用decode()
或encode
,即在每個調用中不是s.decode(...,'replace')。
我試着做與codecs.register_error
不同的事情,但無濟於事。
請幫忙?
如果你正在做's = str(u'abc \ u2013')',你想用unicode工作,如果你把默認編碼設置爲'latin-1',這看起來很奇怪 – 2010-07-29 14:16:05
這是一個壞主意: http://tarekziade.wordpress.com/2008/01/08/syssetdefaultencoding-is-evil/。如果你使用編碼的字符串,你應該明確地解碼它們。否則,你可能會掩蓋討厭的錯誤。 – katrielalex 2010-07-29 14:17:50
具體來說,你應該使用模塊內的Unicode。當外部數據進入時對其解碼,並在其再次熄滅時進行編碼。 – katrielalex 2010-07-29 14:21:03