Python 3 unicode 到 utf-8 文件

标签 python python-3.x unicode encoding utf-8

我正在尝试解析日志文件,但文件格式始终为 unicode。我想自动化的常用流程:

  • I pull file up in notepad
  • Save as...
  • change encoding from unicode to UTF-8
  • Then run python program on it

所以这是我想在 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

如果我可以转换整个文件(就像在我的第一个场景中一样)或者只是以 UTF-8 格式打开整个文件,这样我就不必每次都对 str.encode(或类似的东西)进行编码,这将非常有帮助当我分析一个字符串时。

有人经历过这个并且知道我应该使用哪种方法以及如何去做吗?

编辑:

在python3 repr中,我做到了

>>> f = open('file.txt','r')
>>> f
(_io.TextIOWrapper name='file.txt' mode='r' encoding='cp1252')

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

最佳答案

记事本认为 Unicode 是 Python 的 utf16。 Windows“Unicode”文件以 FF FE 的字节顺序标记 (BOM) 开头,表示 little-endian UTF-16。这就是为什么在使用 utf8 解码文件时会得到以下信息:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

要转换为 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)

请注意,许多 Windows 编辑器喜欢在文件开头使用 UTF-8 签名,或者可能采用 ANSI 代替。 ANSI 是真正的本地语言环境。在美国 Windows 上,它是 cp1252,但它因其他本地化版本而异。如果你打开 utf8.txt 还是乱码,写的时候改用 encoding='utf-8-sig'

关于Python 3 unicode 到 utf-8 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463053/

相关文章:

python - bash 等同于 os.walk?

python - 如何使用 Python 将文本文件中的数据插入到 SQL Server 表中?

c++ - boost 正则表达式 :switching between ascii and unicode

基于 Unicode 的编程语言

python - 当 dtype=object 时,迭代读取大型 numpy 保存文件(即使用生成器)

python - python 将集合中的字符串分组到字典中

python - 类型错误 : cannot deepcopy this pattern object

python - Django 休息 : Retrieving by a different parameter using ModelViewSet

python - 如何在python中旋转 turtle 形状

html - Word XML - XSLT 到 HTML