2016-05-17 43 views
0

我有一个系统在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

我没有使用字节串,它们是从使用该服务的人收到的。我不能那样。 –

+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

相关问题