Python 3 unicode to utf-8 on file

Jer*_*emy 2 unicode encoding utf-8 python-3.4

我试图解析日志文件,但文件格式始终是unicode.我想要自动化的常用过程:

  • 我把文件拉到记事本中
  • 另存为...
  • 将编码从更改unicodeUTF-8
  • 然后运行python程序

所以这是我想在Python 3.4中自动化的过程.几乎只是将文件更改为UTF-8或类似的东西open(filename,'r',encoding='utf-8')虽然这个确切的行在我尝试调用read()时抛出了这个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Run Code Online (Sandbox Code Playgroud)

如果我可以转换整个文件(就像在我的第一个场景中)或者只是以UTF-8打开整个东西,那么每次我分析时我都不需要str.encode(或类似的东西),这将非常有用一个字符串.

有人通过这个,知道我应该使用哪种方法,以及如何做到这一点?

编辑:

在python3 repr中,我做到了

>>> f = open('file.txt','r')
>>> f
(_io.TextIOWrapper name='file.txt' mode='r' encoding='cp1252')
Run Code Online (Sandbox Code Playgroud)

所以现在我的程序中的python代码打开了文件open('file.txt','r',encoding='cp1252').我正在运行很多正则表达式查看这个文件虽然并没有把它拿起来(我想因为它不是utf-8).所以我只需要弄清楚如何从cp1252切换到UTF-8.谢谢@Mark Ransom

Mar*_*nen 6

记事本考虑的Unicodeutf16Python.Windows"Unicode"文件以字节顺序标记(BOM)开头FF FE,表示小端UTF-16.这就是使用utf8解码文件时获得以下内容的原因:

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

要转换为UTF-8,您可以使用:

with open('log.txt',encoding='utf16') as f:
    data = f.read()
with open('utf8.txt','w',encoding='utf8') as f:
    f.write(data)
Run Code Online (Sandbox Code Playgroud)

请注意,许多Windows编辑器在文件开头就像UTF-8签名,或者可能会假设ANSI. ANSI是真正的本地语言区域.在美国Windows上它是cp1252,但它因其他本地化版本而异.如果你打开utf8.txt它仍然看起来乱码,请encoding='utf-8-sig'在写作时使用.