Ansi到UTF-8使用python导致错误

时间:2014-07-22 16:46:54

标签: python utf-8 character-encoding

当我尝试编写一个将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

我应该如何修复我的代码来解决这个问题?

1 个答案:

答案 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参数。