如何将所有经文附加到字符串

时间:2016-05-17 12:41:27

标签: python python-2.5

我在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""

问题在于我无法创建适用于所有情况的解决方案,我该怎么办?

1 个答案:

答案 0 :(得分:2)

如果你不知道你收到了什么,那就没有好的和普遍的方式了。

如果您对丢弃任何非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