Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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 UnicodeDecodeError,无效的连续字节_Python_Unicode_Decode - Fatal编程技术网

Python UnicodeDecodeError,无效的连续字节

Python UnicodeDecodeError,无效的连续字节,python,unicode,decode,Python,Unicode,Decode,为什么下面的项目失败了?为什么“拉丁1”编解码器会成功 其结果是: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode return codecs.utf_8_decode(input, erro

为什么下面的项目失败了?为什么“拉丁1”编解码器会成功

其结果是:

 Traceback (most recent call last):  
 File "<stdin>", line 1, in <module>  
 File "C:\Python27\lib\encodings\utf_8.py",
 line 16, in decode
     return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError:
 'utf8' codec can't decode byte 0xe9 in position 10: invalid continuation byte
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python27\lib\encodings\utf_8.py”,
第16行,在解码中
返回编解码器。utf_8_解码(输入,错误,真)UnicodeDecodeError:
“utf8”编解码器无法解码位置10中的字节0xe9:无效的连续字节

它是无效的UTF-8。该字符是ISO-Latin1中的e-acute字符,这就是它成功使用该代码集的原因

如果您不知道接收字符串的代码集,则会有点麻烦。最好是为您的协议/应用程序选择一个代码集(希望是UTF-8),然后您会拒绝未解码的代码集


如果你不能做到这一点,你将需要启发式。

因为UTF-8是多字节的,并且没有对应于你的
\xe9
加上以下空格的组合的字符

为什么它在utf-8和拉丁语-1中都能成功

以下是utf-8中相同句子的用法:

>>> o.decode('latin-1').encode("utf-8")
'a test of \xc3\xa9 char'

在二进制中,0xE9看起来像
11101001
。如果您阅读了,您将看到这样一个字节后面必须跟两个
10xx xxxx
。例如:

>>> b'\xe9\x80\x80'.decode('utf-8')
u'\u9000'
但这只是异常的机械原因。在本例中,您有一个几乎肯定是用拉丁语1编码的字符串。您可以看到UTF-8和拉丁语1看起来有多不同:

>>> u'\xe9'.encode('utf-8')
b'\xc3\xa9'
>>> u'\xe9'.encode('latin-1')
b'\xe9'

(注意,我在这里混合使用Python2和Python3表示法。输入在任何版本的Python中都是有效的,但是Python解释器不太可能以这种方式同时显示unicode和字节字符串。)

当我试图用pandas.read\u CSV打开CSV文件时,我遇到了相同的错误 方法

解决方案是将编码更改为
拉丁语-1

pd.read_csv('ml-100k/u.item', sep='|', names=m_cols , encoding='latin-1')

如果在操作刚打开的文件时出现此错误,请检查您是否在
'rb'
模式下打开了它

在我从
.txt
文件中读取包含希伯来语的文本时,也会发生此错误


我单击:
file->save as
并将此文件保存为
UTF-8
encoding

在这种情况下,我尝试执行一个.py,它激活了路径/file.sql

我的解决方案是将file.sql的编码修改为“不带BOM的UTF-8”,这样就行了

你可以用记事本++来做

我会留下一部分代码

/代码/

con=psycopg2.connect(主机=sys.argv[1], port=sys.argv[2],dbname=sys.argv[3],user=sys.argv[4],password=sys.argv[5])

cursor=con.cursor()
sqlfile=open(路径'r')

utf-8代码错误通常在数值范围超过0到127时出现

引发此异常的原因是:

1) 如果代码点<128,则每个字节与代码点的值相同。 2) 如果代码点为128或更大,则无法在此编码中表示Unicode字符串。(在这种情况下,Python会引发UnicodeError异常。)

为了克服这个问题,我们有一套编码,最广泛使用的是“拉丁语-1,也称为ISO-8859-1”

因此ISO-8859-1 Unicode点0–255与拉丁语-1值相同,因此转换为这种编码只需要将代码点转换为字节值;如果遇到大于255的代码点,则无法将字符串编码为拉丁语-1

当您尝试加载数据集时发生此异常时,请尝试使用此格式

df=pd.read\u csv(“top50.csv”,encoding='ISO-8859-1')

在语法末尾添加编码技术,然后接受加载数据集。

如果显示UTF-8的错误,请使用该技术

pd.read_csv('File_name.csv',encoding='latin-1')

当你输入一个特定的文件或数据时,就会出现这种错误,比如:-

data=pd.read_csv('/kaggle/input/fertilizers-by-product-fao/FertilizersProduct.csv)
然后错误显示如下:- UnicodeDecodeError:“utf-8”编解码器无法解码位置1中的字节0xf4:无效的连续字节

因此,为了避免这种类型的错误,可以通过添加参数来删除

data=pd.read_csv('/kaggle/input/fertilizers-by-product-fao/FertilizersProduct.csv', encoding='ISO-8859-1')

解决方案是改为“UTF-8 sin BOM”

谢谢(还有另一个回答),我错误地认为255之前的字符可以直接转换。我得到了
unicodeincodeerror:“ascii”编解码器无法对位置2-3的字符进行编码:序号不在范围内(128)
使用
时出错。encode(拉丁语-1)
有关启发式,请参阅chardet库。Latin-1是单字节编码系列,因此其中的所有内容都应在UTF-8中定义。但是为什么有时候拉丁1赢了呢?这真的解决了问题吗?它基本上不是告诉熊猫通过降级到一种不太复杂的编码方式来忽略字节吗?嗨,欢迎来到SO!请确保您的答案比此问题中已有的其他答案有所改进。由于此答案,您能够避免UnicodeDecodeError的错误:“utf-8”编解码器无法解码位置2024079处的字节0xd7:通过
soup=beautifulsou(打开('webpage.html','rb'),'html.parser')的无效延续字节)
请正确设置代码格式。
data=pd.read_csv('/kaggle/input/fertilizers-by-product-fao/FertilizersProduct.csv', encoding='ISO-8859-1')