【发布时间】:2011-03-22 18:10:37
【问题描述】:
我正在处理以 latin1 编码的外部数据。所以我添加了sitecustomize.py 并在其中添加了
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这似乎很奇怪 -
这是个坏主意:tarekziade.wordpress.com/2008/01/08/…。如果您使用编码字符串,则应显式解码它们。否则你可能会掩盖讨厌的错误。
-
具体来说,您应该在模块中使用 Unicode。外部数据进来时解码,出去时再编码。