我只是希望python代码能够工作,但是这些转换错误我不明白(我总是得到某种类型的'ascii‘编码或解码错误)。我疯了,在线的每一部分做了一个解码和编码,这仍然给我带来麻烦。如果您愿意更正它,可以在https://github.com/TBOpen/papercut通过GIT获得(我还解决了一个类似的错误,没有在第885行使用self.wfile.write(message.decode('cp1250', 'replace').encode('ascii', 'replace') + "\r\n")签入)。
然而,这是一个我无法解决的问题的回溯(在那里我放弃了)。
Traceback (most recent call last):
File "/usr/local/lib/python2.6/SocketServer.py", line 535, in process_request
self.finish_request(request, client_address)
File "/usr/local/lib/python2.6/SocketServer.py", line 320, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/local/lib/python2.6/SocketServer.py", line 615, in __init__
self.handle()
File "./papercut.py", line 221, in handle
getattr(self, "do_%s" % (command))()
File "./papercut.py", line 410, in do_ARTICLE
self.send_response("%s\r\n%s\r\n\r\n%s\r\n.".decode('cp1250', 'replace').encode('ascii', 'replace') % (response.decode('cp1250', 'replace').encode('ascii', 'replace'), result[0].decode('cp1250', 'replace').encode('ascii', 'replace'), result[1].decode('cp1250', 'replace').encode('ascii', 'replace')))
File "/usr/local/lib/python2.6/encodings/cp1250.py", line 15, in decode
return codecs.charmap_decode(input,errors,decoding_table)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 20: ordinal not in range(128)蒂娅!!
发布于 2014-01-13 09:15:59
根本问题是,response、result[0]或result[1]中的一个实际上是unicode字符串,而不是编码的str字符串。
因此,当您调用(任意选择一个) response.decode('cp1250', 'replace')时,您要求对已经解码为Unicode的内容进行解码。Python2.x所做的是首先将其编码为默认编码(ASCII),以便它能够根据您的请求对其进行解码。这就是为什么你要打电话给UnicodeEncodeError decode.*的原因
要解决这个问题,你必须弄清楚这三个中哪一个是错的,以及原因。如果语句中包含4个解码调用,这是不可能的,但是如果将其分解为单独的语句,或者添加一些print调试,在这些变量被使用之前查看其中的内容,这是不可能的。
然而,这将使您的生活更容易完全重组您的代码。而不是在整个地方来回转换,给自己几十个地方来犯一个简单的错误,最终导致程序中途出现不可调试的错误,只需在输入时对所有输入进行解码,以Unicode方式处理所有内容,然后在输出时对所有内容进行编码。
顺便说一句,如果您还没有读过Python的Unicode方法和博客文章每个软件开发人员绝对、积极的绝对最低限度必须了解Unicode和字符集(没有借口!),那么先读一读,再做进一步的介绍。
*如果您认为这是语言…的愚蠢设计这就是Python 3存在的主要原因。在Python3中,您不能decode a unicode或encode a bytes,因此错误会尽早出现,并告诉您到底出了什么问题,而不是让您试图查找在错误类型上调用错误方法的位置,并得到一个没有意义的错误。因此,如果您想使用Python 2而不是3,您不会抱怨Python 2的设计比3的设计更愚蠢。
https://stackoverflow.com/questions/21087311
复制相似问题