我有一个powershell脚本,我试图读取它并对其进行一些分析。我只能将其读取为字节而不是纯文本。
f=open('~/Data/3 - Get-Services - Jobs Version 1.0.ps1','r')
txt=f.read()
当我尝试上面的代码时,我抛出了一个错误。
UnicodeDecodeError:“ utf-8”编解码器无法解码位置中的字节0xff 0:无效的起始字节
因此,我尝试将其读取为字节,然后将其解码为纯文本,但仍然抛出错误。
f=open('~/Data/3 - Get-Services - Jobs Version 1.0.ps1','rb')
txt=f.read()
txt.decode('utf-8')
UnicodeDecodeError:“ utf-8”编解码器无法解码位置中的字节0xff 0:无效的起始字节
我在命令行上查找了数据,并且发现所有文件都以“��”开头。我觉得这个角色正在引起问题,但是我不知道如何解决这个问题。
可以请你帮忙
答案 0 :(得分:4)
编辑:尽管有四次投票,但我的猜测是错误。在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')
答案 1 :(得分:2)
我引用了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
应该可以解决您的问题。