UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c
我有一个套接字服务器,它应该从客户机接收UTF-8有效字符。
问题是有些客户机(主要是黑客)通过它发送所有错误的数据。
我可以很容易地分辨出真正的客户机,但我将记录所有发送的数据,以便稍后分析。
有时我会得到这样的字符
我需要能够使字符串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码输入是不允许在我的应用程序。
方法:使用开放也从中
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') ? |
我有同样的问题与我和我的
1 | str = str.decode('unicode_escape').encode('utf-8') |
只是在案件人有同样的问题。我在一个youcompleteme使用VIM,ycmd无法启动这一错误消息,什么我做的是:
你做什么,如果你需要做一个改变一个文件,但不知道该文件的编码?如果你知道ASCII兼容的编码是唯一的想避免或修改使用所提供的配件,你可以打开文件与surrogateescape错误处理程序:
1 2 | with open(fname, 'r', encoding="ascii", errors="surrogateescape") as f: data = f.read() |