无法以纯文本格式读取文件
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')
以上是关于无法以纯文本格式读取文件的主要内容,如果未能解决你的问题,请参考以下文章