Python很可能没有检测到使用chcp命令所做的临时代码页更改,因此在调用open时,它不会使用正确的编码。您可以通过以下操作来验证:>>> fd = open('/tmp/somefile.txt', 'r')
>>> fd
当然,在Python 3中可以覆盖它,可以执行以下操作:
^{pr2}$
使encoding参数更显式可能是您想要的。在
另外,您也可以在不使用二进制模式的情况下打开写端(我看到您指定了'wb')。只要使用'w'并在翻译编码时明确说明目标编码。在>>> fd2 = open('/tmp/write.txt', 'w', encoding='UTF-8')
>>> fd2.write(u'abcd話')
5
但是,它返回写入的字符数。在
为了完成你的翻译,你肯定可以做一些类似的事情cname = "c:\\test_before"
dat = open(cname, "r", encoding="gbk")
new = open("c:\\test_utf-8", "w", encoding="utf-8")
for line in dat.readlines():
new.write(line)
new.close()
最后,为了保持一致性,您应该使用文件处理程序上下文管理器来避免您需要关闭文件。在这个简单的用例中,您的代码如下所示:def gbk_to_utf8(source, target):
with open(source, "r", encoding="gbk") as src:
with open(target, "w", encoding="utf-8") as dst:
for line in src.readlines():
dst.write(line)