如何解决 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte in python

Hyo*_*oon 5 python

我潦草地记下数据,不得不将数据帧保存为 utf-16 (Unicode),因为拉丁语/西班牙语单词以 utf-8 的形式显示很奇怪。我使用以下代码来保存数据帧:

 df.to_csv("blogdata.csv", encoding = "utf-16", sep = "\t", index = False)
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下代码读取文件以清理数据时:

 blogdata = pd.read_csv('c:/Users/hyoungm?Downloads/blogdata.csv')
Run Code Online (Sandbox Code Playgroud)

它显示以下错误。


() ----> 1 blogdata = pd.read_csv('C:/Users/hyoungm/Downloads/blogdata.csv') 中的 UnicodeDecodeError Traceback(最近一次调用最后一次)

...

pandas._libs.parsers.TextReader 中的 pandas_libs\parsers.pyx。cinit ()

pandas._libs.parsers.TextReader._get_header() 中的 pandas_libs\parsers.pyx

UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 0 中的字节 0xff:起始字节无效

请在此处查看我的屏幕截图: 在此处输入图片说明

我不知道如何在不丢失英文句子中的拉丁文/西班牙文单词的情况下保存原始数据,也不知道如何读取 Unicode 数据文件。有人可以帮我解决这个问题吗?

非常感谢!

小智 19

遇到同样的情况,你可以尝试

blogdata = pd.read_csv('c:/Users/hyoungm?Downloads/blogdata.csv',sep = "\t", encoding='latin')
Run Code Online (Sandbox Code Playgroud)


小智 7

当编码未知时,有一个 Python 库可能会有所帮助:chardet

with open(filename, 'rb') as file:
    print(chardet.detect(file.read()))
Run Code Online (Sandbox Code Playgroud)

检测找到编码,'rb' 将以二进制形式读取文件

  • 它在编程上没有那么有用,但如果您只需要一次性编码检测并安装了 Notepad++,它会很好地为您提供该信息(注意:我发现可以使用 `encoding='utf 读取 'UCS-2 LE BOM' -16'`) (2认同)

Sér*_*hin 5

您似乎正在尝试使用 utf-8 编解码器来解码 utf-16 编码文件。

根据pandas 文档encoding,您可以通过将参数传递给函数来指定编解码器read_csv()

你能试试下面的代码吗?

blogdata = pd.read_csv('c:/Users/hyoungm?Downloads/blogdata.csv', encoding = 'utf-16')
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。如果有不清楚的地方请告诉我。

编辑:我想正确的文件路径应该是“c:/Users/hyoungm/Downloads/blogdata.csv”,在“hyoungm”和“Downloads”之间有一个“/”,所以如果我是对的,请相应地调整脚本。