当我尝试编写一个将Ansi转换为UTF-8的python程序时,我发现了这个
https://stackoverflow.com/questions/14732996/how-can-i-convert-utf-8-to-ansi-in-python
将UTF-8转换为Ansi。
我认为通过颠倒顺序才会起作用。所以我编码了
file_path_ansi = "input.txt"
file_path_utf8 = "output.txt"
#open and encode the original content
file_source = open(file_path_ansi, mode='r', encoding='latin-1', errors='ignore')
file_content = file_source.read()
file_source.close
#write
file_target = open(file_path_utf8, mode='w', encoding='utf-8')
file_target.write(file_content)
file_target.close
但它会导致错误。
TypeError: file<> takes at most 3 arguments <4 given>
所以我改变了
file_source = open(file_path_ansi, mode='r', encoding='latin-1', errors='ignore')
到
file_source = open(file_path_ansi, mode='r', encoding='latin-1')
然后它会导致另一个错误:
TypeError: 'encoding' is an invalid keyword arguemtn for this function
我应该如何修复我的代码来解决这个问题?
答案 0 :(得分:6)
您正在尝试在Python 2上使用{3}的Python 3版本。在主要版本之间,对I / O支持进行了大修,支持更好的编码和解码。
您可以在Python 2中获得与open()
function相同的新版本。
我使用io.open()
进行复制,因此您无需将整个文件读入内存:
import io
with io.open(file_path_ansi, encoding='latin-1', errors='ignore') as source:
with io.open(file_path_utf8, mode='w', encoding='utf-8') as target:
shutil.copyfileobj(source, target)
但要小心;大多数人谈论ANSI是指shutil.copyfileobj()
function的一个;您可能在CP(代码页)1252中确实有一个文件,它几乎是,但与Windows codepages不完全相同。如果是,请使用cp1252
代替latin-1
作为encoding
参数。