无法将文件读取为纯文本

时间:2019-04-12 07:39:10

标签: python python-3.x file

我有一个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:无效的起始字节

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

可以请你帮忙

2 个答案:

答案 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应该可以解决您的问题。