UnicodeDecodeError:'utf8'编解码器无法解码字节0x9c

我有一个应该从客户端接收UTF-8有效字符的套接字服务器。

问题是一些客户端(主要是黑客)正在发送所有错误的数据。

我可以很容易区分真正的客户端,但是我正在logging所有发送的数据,以便日后分析。

有时我会得到像这样的字符œ导致UnicodeDecodeError错误。

我需要能够使stringUTF-8有或没有这些字符。


更新:

对于我的特殊情况,套接字服务是MTA,因此我只希望接收ASCII命令,例如:

 EHLO example.com MAIL FROM: <john.doe@example.com> ... 

我在JSON中logging所有这一切。

然后一些没有好意的人决定出售各种垃圾。

这就是为什么对于我的具体情况,剥离非ASCII字符是完全正确的。

http://docs.python.org/howto/unicode.html#the-unicode-type

 str = unicode(str, errors='replace') 

要么

 str = unicode(str, errors='ignore') 

注意:此解决scheme将删除(忽略)返回没有它们的string。 只有在你需要剥离它们时才使用它。

或者,使用codecs模块中的open方法读取文件:

 import codecs with codecs.open(file_name, "r",encoding='utf-8', errors='ignore') as fdata: 
 >>> '\x9c'.decode('cp1252') u'\u0153' >>> print '\x9c'.decode('cp1252') œ 

这种types的问题现在已经转移到了Python 3.我不知道Python 2只是简单地解决了文件编码问题。

我发现这个差异的很好的解释,以及如何find一个解决scheme后,以上都没有为我工作。

http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html

简而言之,要使Python 3与Python 2的行为尽可能相似:

 with open(filename, encoding="latin-1") as datafile: # work on datafile here 

但是,阅读文章,没有一个适合所有的解决scheme。

我有UnicodeDecodeError相同的问题,我解决了这一行。 不知道是否是最好的方法,但它为我工作。

 str = str.decode('unicode_escape').encode('utf-8') 

以防万一有人有同样的问题。 我用YouCompleteMe使用vim,未能启动ycmd与此错误消息,我所做的是: export LC_CTYPE="en_US.UTF-8" ,问题已经消失。