如何从文件中删除前导Unciode字符?

时间:2015-07-31 09:23:22

标签: python python-3.x unicode

我正在处理几千个xml文件,并且有一些问题文件。

在每种情况下,它们都包含前导Unicode字符,例如C3 AF C2 BB C2 BFEF BB BF等。

在所有情况下,该文件仅包含ASCII字符(在标题字节之后),因此不会有数据丢失的风险将它们转换为ASCII。

我不允许更改磁盘上文件的内容,只能将它们用作我脚本的输入。

最简单的是,我很乐意将这些文件转换为ASCII(解析所有输入文件,进行一些更改并写入输出目录,第二个脚本将处理它们。)

我该怎么编码呢?当我尝试:

with open(filePath, "rb") as file:
    contentOfFile = file.read()

unicodeData = contentOfFile.decode("utf-8")
asciiData = unicodeData.encode("ascii", "ignore")

with open(filePath, 'wt')  as file:
    file.write(asciiData)

我收到错误must be str, not bytes

我也试过

    asciiData = unicodedata.normalize('NFKD', unicodeData).encode('ASCII', 'ignore')

具有相同的结果。我该如何纠正?

或者还有其他方法可以隐藏文件吗?

1 个答案:

答案 0 :(得分:3)

...
asciiData = unicodeData.encode("ascii", "ignore")

asciiData是字节对象,因为它是编码的。打开文件时需要使用二进制模式而不是文本模式:

with open(filePath, 'wb')  as file:  # <---
    file.write(asciiData)