如何在多个文本文件中将所有'0xa0'字符替换为空格?
我一直在尝试用Python批量将一些文本文件转换成UTF-8编码,但总是出现这个错误。有没有办法在Python脚本或者bash命令中替换它们呢?
我使用了以下代码:
writer = codecs.open(os.path.join(wrd, 'dict.en'), 'wtr', 'utf-8')
for infile in glob.glob(os.path.join(wrd,'*.txt')):
print infile
for line in open(infile):
writer.write(line.encode('utf-8'))
结果却出现了这些错误:
Traceback (most recent call last):
File "dicting.py", line 30, in <module>
writer.write(line2.encode('utf-8'))
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 216: unexpected code byte
2 个回答
3
你是不是漏掉了一些代码?你在读取line
,但却想要重新编码line2
。
无论如何,你需要告诉Python输入文件的编码是什么;如果你不知道编码是什么,那你就得直接打开文件,手动进行替换,而不能依赖编码工具。
11
好的,首先要说的是:你的输出文件会自动把写入的文本编码为 utf-8
,所以在调用 write()
方法时,不需要再加上 encode('utf-8')
这个方法。
所以你可以在你的内部循环中直接使用以下代码:
writer.write(line)
如果这样还不行,那问题很可能是因为,正如其他人提到的,你没有正确解码你的 输入 文件。
假设你的输入文件是用 cp1252
编码的,你可以在内部循环中试试以下代码:
for line in codecs.open(infile, 'r', 'cp1252'):
writer.write(line)
另外一点:'wtr' 这个模式字符串没有意义(因为写入权限意味着也有读取权限)。你可以简化为 'wt' 或者直接用 'w'。