为什么以下项目失败?为什么它会成功使用“latin-1”编解码器?
o = "a test of \xe9 char" #I want this to remain a string as this is what I am receiving
v = o.decode("utf-8")
结果:
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
答案 0 :(得分:203)
在二进制文件中,0xE9看起来像1110 1001
。如果您阅读UTF-8 on Wikipedia,则会看到此类字节后面必须跟两个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'
(注意,我在这里混合使用Python 2和3表示。输入在任何Python版本中都有效,但是你的Python解释器不太可能以这种方式实际显示unicode和byte字符串。)< / p>
答案 1 :(得分:155)
当我尝试通过pandas read_csv方法打开csv文件时出现了同样的错误。
解决方案是将编码更改为&#39; latin-1&#39;:
pd.read_csv('ml-100k/u.item', sep='|', names=m_cols , encoding='latin-1')
答案 2 :(得分:55)
无效的UTF-8。该字符是ISO-Latin1中的e-acute字符,这就是为什么它成功使用该代码集。
如果你不知道你收到字符串的代码集,那你就有点麻烦了。如果为您的协议/应用程序选择一个代码集(希望是UTF-8),然后您只是拒绝那些没有解码的代码集,那将是最好的。
如果你不能这样做,你需要启发式。
答案 3 :(得分:39)
因为UTF-8是多字节的,并且没有与\xe9
加上以下空格的组合相对应的字符。
为什么要在两者 utf-8和latin-1中取得成功?
这里的句子应该是如何用utf-8:
>>> o.decode('latin-1').encode("utf-8")
'a test of \xc3\xa9 char'
答案 4 :(得分:10)
utf-8代码错误通常是在数值范围超过0到127时出现的。
引发此异常的原因是:
1)如果代码点小于<128,则每个字节与代码点的值相同。 2)如果代码点为128或更大,则无法使用此编码表示Unicode字符串。 (在这种情况下,Python会引发UnicodeEncodeError异常。)
为了克服这一问题,我们提供了一组编码,使用最广泛的是“ Latin-1,也称为ISO-8859-1”
因此,ISO-8859-1 Unicode点0–255与Latin-1值相同,因此,要转换为这种编码,只需要将代码点转换为字节值即可;如果遇到大于255的代码点,则无法将字符串编码为Latin-1
当您尝试加载数据集时发生此异常时,请尝试使用此格式
df=pd.read_csv("top50.csv",encoding='ISO-8859-1')
在语法末尾添加编码技术,然后接受该技术以加载数据集。
答案 5 :(得分:10)
使用它,如果它显示UTF-8错误
pd.read_csv('File_name.csv',encoding='latin-1')
答案 6 :(得分:4)
如果在处理刚刚打开的文件时出现此错误,请检查是否以'rb'
模式打开了文件
答案 7 :(得分:4)
当您正在输入熊猫中的特定文件或数据时,会出现这种类型的错误,例如:-
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')
答案 8 :(得分:0)
在我从.txt
文件中读取包含希伯来语的文本时,这也发生在我身上。
我点击了file -> save as
,并将此文件保存为UTF-8
编码
答案 9 :(得分:0)
解决方案改为“UTF-8 sin BOM”
答案 10 :(得分:-1)
在这种情况下,我试图执行一个.py来激活路径/file.sql。
我的解决方案是将file.sql的编码修改为“不带BOM的UTF-8”,并且可以!
您可以使用Notepad ++做到这一点。
我将保留部分代码。
/ 代码 /
con = psycopg2.connect(host = sys.argv [1], 端口= sys.argv [2],dbname = sys.argv [3],用户= sys.argv [4],密码= sys.argv [5])
cursor = con.cursor() sqlfile = open(路径,'r')