Jer*_*emy 2 unicode encoding utf-8 python-3.4
我试图解析日志文件,但文件格式始终是unicode.我想要自动化的常用过程:
- 我把文件拉到记事本中
- 另存为...
- 将编码从更改
unicode
为UTF-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
记事本考虑的Unicode
是utf16
Python.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'
在写作时使用.
归档时间: |
|
查看次数: |
7516 次 |
最近记录: |