Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x UnicodeDecodeError:&x27;utf-8';编解码器可以';在位置0处对字节0xa5进行解码:起始字节无效_Python 3.x_Unicode_Utf 8_Cygwin - Fatal编程技术网

Python 3.x UnicodeDecodeError:&x27;utf-8';编解码器可以';在位置0处对字节0xa5进行解码:起始字节无效

Python 3.x UnicodeDecodeError:&x27;utf-8';编解码器可以';在位置0处对字节0xa5进行解码:起始字节无效,python-3.x,unicode,utf-8,cygwin,Python 3.x,Unicode,Utf 8,Cygwin,这不是解码的问题吗 谢谢 这不是解码的问题吗 仅当您的文件实际上是用utf-8编码的,情况似乎并非如此。如果文件中的编码为“latin1”,则“\xa5”字节表示“¥”,这在世界范围内广泛使用,包括在西方安装的Windows中 如果此数据中存在“¥”对您有意义,则该文件一定是用拉丁语编码的(类似于“cp1252”,在几个字符上有所不同)-只需替换您的解码行即可: def read_str(self, open_file, length, append): str_value = open

这不是解码的问题吗

谢谢

这不是解码的问题吗

仅当您的文件实际上是用utf-8编码的,情况似乎并非如此。如果文件中的编码为“latin1”,则“\xa5”字节表示“¥”,这在世界范围内广泛使用,包括在西方安装的Windows中

如果此数据中存在“¥”对您有意义,则该文件一定是用拉丁语编码的(类似于“cp1252”,在几个字符上有所不同)-只需替换您的解码行即可:

def read_str(self, open_file, length, append):
    str_value = open_file.read(length)
    if append:
        self.log_data += str_value
    return str_value.decode('utf-8')
您的代码应该适用于此文件。否则,即字符应该是另一个东西,则您必须通过其他方式猜出文件的正确编码(例如,如果文件是西里尔文CP855,则文件中相同的“\xa5”字节表示“Ф”字符)

在上面代码的另一个注释中,代码尝试以二进制模式读取文件(假设,因为比赛正在解码),但是,对于一个字符的所有字节都没有读取的情况,没有考虑。也就是说,utf-8编码中的一个字符可以有1-4字节的长度——如果“str_值”读取部分字符,解码步骤将失败。(这里甚至可能是这样,即使文件实际上是utf-8编码的)。正确的做法是将文件作为文本打开,让Python编解码器处理解码步骤


换句话说:任何代码创建的
open\u文件
都应该执行
open(“,“rt”,encoding=“latin1”)
((如果任何其他代码将
self.log\u数据
视为字节而不是文本,即尝试调用
self.log\u数据.decode
,则也应该进行更改(只需删除“.decode”调用)

Lain-1与CP-1252不同。后者有印刷引号“像这样”,这在拉丁语-1中不存在。我收到另一个关于此
回溯的错误(最近一次调用上次):parser.parse()文件“parse_peak_user_log.py”第454行的文件“parse_peak_user_log.py”,第237行,在parse return self.parse_open_file(open_file)文件“parse_peak_user_log.py”中,第254行,在parse_open_file中,如果不是self.parse_four_cc(open_file):parse_peak_user_log.py文件“parse_peak_user_log.py”,第334行,在parse_four_-cc-cc=self.read.str(open_-str文件“parse_-peak_file,4,4,True)中,第353行,在read_str return str_value('latin1')TypeError中:“bytes”对象不可调用
您的回溯显示您没有键入对“.decode”方法的调用-答案中的代码会这样做。当正确的值为
str_value('latin1')
时,您有了
str value('latin1')
。您应该看看我的建议,即首先将文件作为文本打开。
def read_str(self, open_file, length, append):
    str_value = open_file.read(length)
    if append:
        self.log_data += str_value
    return str_value.decode('utf-8')
return str_value.decode('latin1')