我正在处理几千个xml文件,并且有一些问题文件。
在每种情况下,它们都包含前导Unicode字符,例如C3 AF C2 BB C2 BF
和EF 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')
具有相同的结果。我该如何纠正?
或者还有其他方法可以隐藏文件吗?
答案 0 :(得分:3)
...
asciiData = unicodeData.encode("ascii", "ignore")
asciiData
是字节对象,因为它是编码的。打开文件时需要使用二进制模式而不是文本模式:
with open(filePath, 'wb') as file: # <---
file.write(asciiData)