如何将所有 econdings 附加到字符串
how to append all econdings to a string
我在 python 2.5 中有一个系统,它处理所有语言和编码的文件,我想记录一些东西,我对非标准字符并不感兴趣,我愿意仅对日志使用 ascii 字符,但是我不时收到类似的错误。
<type 'tuple'>: (<type 'exceptions.UnicodeEncodeError'>, UnicodeEncodeError('ascii', u'Create project: 2016 May European Tour: There\u2019s Still Time to Buy Tickets!', 45, 46, 'ordinal not in range(128)'), <traceback object at 0x105b84908>)
这是我试过的一些代码示例:
这在大多数情况下都有效,但并非总是如此
self.__log += data.decode('utf-8', 'ignore').encode("utf-8")
这失败了,但它在之前的几个不起作用中起作用
self.__log += data.encode('ascii', 'ignore')
这适用于其他一些情况。
self.__log += data.decode('utf-8', 'replace')
日志现在被定义为
self.__log = ""
但我也试过
self.__log = u""
问题是我无法创建适用于所有情况的解决方案,我该怎么办?
如果您不知道自己收到的是什么,就没有通用的好方法。
如果您愿意丢弃任何非 ascii 的东西,并且在数据不是 ascii 时严重破坏数据,您可以尝试这样的事情:
def forceAscii(s):
if isinstance(s, unicode):
return unicode(s.encode('ascii', 'replace'))
elif isinstance(s, basestring):
return s.decode('ascii', 'replace').encode('ascii', 'replace')
else:
raise ValueError('Expected a string, got a %r' % type(s))
给定任何 Unicode 或字节字符串,这将为您提供一个仅包含 ascii 字符的 Unicode 字符串。无法强制转换为 ascii 的字符将替换为“?”标记.
请注意,某些编码最终会导致某些字符 严重 损坏,例如映射到不可打印的 ascii 字符,如 \x00
.
我在 python 2.5 中有一个系统,它处理所有语言和编码的文件,我想记录一些东西,我对非标准字符并不感兴趣,我愿意仅对日志使用 ascii 字符,但是我不时收到类似的错误。
<type 'tuple'>: (<type 'exceptions.UnicodeEncodeError'>, UnicodeEncodeError('ascii', u'Create project: 2016 May European Tour: There\u2019s Still Time to Buy Tickets!', 45, 46, 'ordinal not in range(128)'), <traceback object at 0x105b84908>)
这是我试过的一些代码示例:
这在大多数情况下都有效,但并非总是如此
self.__log += data.decode('utf-8', 'ignore').encode("utf-8")
这失败了,但它在之前的几个不起作用中起作用
self.__log += data.encode('ascii', 'ignore')
这适用于其他一些情况。
self.__log += data.decode('utf-8', 'replace')
日志现在被定义为
self.__log = ""
但我也试过
self.__log = u""
问题是我无法创建适用于所有情况的解决方案,我该怎么办?
如果您不知道自己收到的是什么,就没有通用的好方法。
如果您愿意丢弃任何非 ascii 的东西,并且在数据不是 ascii 时严重破坏数据,您可以尝试这样的事情:
def forceAscii(s):
if isinstance(s, unicode):
return unicode(s.encode('ascii', 'replace'))
elif isinstance(s, basestring):
return s.decode('ascii', 'replace').encode('ascii', 'replace')
else:
raise ValueError('Expected a string, got a %r' % type(s))
给定任何 Unicode 或字节字符串,这将为您提供一个仅包含 ascii 字符的 Unicode 字符串。无法强制转换为 ascii 的字符将替换为“?”标记.
请注意,某些编码最终会导致某些字符 严重 损坏,例如映射到不可打印的 ascii 字符,如 \x00
.