关于python:UnicodeDecodeError:’utf8’编解码器无法解码字节0x9c

UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c

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

问题是有些客户机(主要是黑客)通过它发送所有错误的数据。

我可以很容易地分辨出真正的客户机,但我将记录所有发送的数据,以便稍后分析。

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

我需要能够使字符串utf-8带有或不带有这些字符。

更新:

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

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

我把这些都记录在JSON中。

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

这就是为什么对于我的特定情况,去掉非ASCII字符是完全可以的。


http:/ / / / unicode.html # docs.python.org HOWTO的unicode类型

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

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

注:本想带出(ignore)返回的字符串中的字符的问题,没有他们。

这是我理想的案例。我使用它作为防止非ASCII码输入是不允许在我的应用程序。

方法:使用开放也从中codecs模块读写文件:

1
2
3
import codecs
with codecs.open(file_name, 'r', encoding='utf-8',
                 errors='ignore') as fdata:


本型作物的问题我现在我搬到了Python 3。我没有想法什么简单的Python 2蒸汽滚动任何问题与文件的编码。

我发现这很好解释的差异和如何找到一个解决方案后,上面没有为我工作。

python-notes.curiousefficiency.org http:/ / / / /恩/最新python3 _ _ processing.html文本文件

在短,让Python 3同样的行为可能作为一个Python 2使用:

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

然而,阅读文章,没有一刀切的解决方案。


改变从C到Python的引擎是在欺骗我。

引擎是C:

1
pd.read_csv(gdp_path, sep='\t', engine='c')

'utf-8' codec can't decode byte 0x92 in position 18: invalid start byte

引擎是Python:

1
pd.read_csv(gdp_path, sep='\t', engine='python')

没有错误我。


1
2
3
4
>>> '\x9c'.decode('cp1252')
u'\u0153'
>>> print '\x9c'.decode('cp1252')
?


我有同样的问题与我和我的UnicodeDecodeErrorIT这一行。不知道是最好的方式,但它为我工作。

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

只是在案件人有同样的问题。我在一个youcompleteme使用VIM,ycmd无法启动这一错误消息,什么我做的是:export LC_CTYPE="en_US.UTF-8",早餐问题破灭。


你做什么,如果你需要做一个改变一个文件,但不知道该文件的编码?如果你知道ASCII兼容的编码是唯一的想避免或修改使用所提供的配件,你可以打开文件与surrogateescape错误处理程序:

1
2
with open(fname, 'r', encoding="ascii", errors="surrogateescape") as f:
    data = f.read()