无法以纯文本格式读取文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法以纯文本格式读取文件相关的知识,希望对你有一定的参考价值。

我有一个PowerShell脚本,我试图读入并对其进行一些分析。我只能将其作为字节而不是纯文本来读取。

f=open('~/Data/3 - Get-Services - Jobs Version 1.0.ps1','r')
txt=f.read()

当我尝试上面的代码时,我抛出一个错误。

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

所以,我尝试将其作为字节读取,然后将其解码为纯文本,但我仍然抛出错误。

f=open('~/Data/3 - Get-Services - Jobs Version 1.0.ps1','rb')
txt=f.read()
txt.decode('utf-8')

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

我在命令行上查找数据,我发现所有文件都以“ ”开头。我觉得这个问题引起了问题,但我不知道如何解决这个问题。

能否请你帮忙

答案

我引用了来自error UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte的Peter Ogden的答案(不是接受的答案)。

我遇到同样的错误时遇到过这个问题,经过一些研究我可以确认,这是当你尝试用UTF-8解码UTF-16文件时发生的错误。

对于UTF-16,第一个字符(UTF-16中的2个字节)是字节顺序标记(BOM),它用作解码提示,并且不会在解码字符串中显示为字符。这意味着第一个字节将是FE或FF,第二个字节将是另一个。

在我找到真正的答案后,重新编辑

因此,更改为UTF-16应该可以解决您的问题。

另一答案

编辑:尽管有四个赞成票,我的猜测是错误的。在UTF-8编码中,BOM看起来像0xEF,0xBB,0xBF,因此第一个字节是0xEF而不是0xFF

0xFF,0xFE将表示一个小端UTF-16文件的开头。使用utf-16编码!


我的猜测是,开头的两个“未知”字符是Unicode BOM (byte-order mark)

如果是这种情况,请使用utf-8-sig instead of utf-8进行解码。首先不需要读取字节;你可以直接将encoding传递给open()函数:

f = open('~/Data/3 - Get-Services - Jobs Version 1.0.ps1', 'r', encoding='utf-8-sig')

以上是关于无法以纯文本格式读取文件的主要内容,如果未能解决你的问题,请参考以下文章

iOS-解析读取CSV文件,解析excel文件

PHP php标头以纯文本格式查看页面

mysql错误代码1045 是为啥

Python读取复杂电子表格(CSV)数据小技巧一则

Python读取复杂电子表格(CSV)数据小技巧一则

Python读取复杂电子表格(CSV)数据小技巧一则