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

use*_*767 4 python utf-8 character-encoding

当我试图编写一个将Ansi转换为UTF-8的python程序时,我发现了这一点

/sf/ask/1031309751/

它将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
Run Code Online (Sandbox Code Playgroud)

但它会导致错误.

TypeError: file<> takes at most 3 arguments <4 given>
Run Code Online (Sandbox Code Playgroud)

所以我改变了

file_source = open(file_path_ansi, mode='r', encoding='latin-1', errors='ignore')
Run Code Online (Sandbox Code Playgroud)

file_source = open(file_path_ansi, mode='r', encoding='latin-1')
Run Code Online (Sandbox Code Playgroud)

然后它会导致另一个错误:

TypeError: 'encoding' is an invalid keyword arguemtn for this function
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 7

您正在尝试在Python 2上使用该open()函数的Python 3版本.在主要版本之间,I/O支持进行了大修,支持更好的编码和解码.

您可以在Python 2中获得相同的新版本io.open().

我使用该shutil.copyfileobj()函数进行复制,因此您不必将整个文件读入内存:

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)
Run Code Online (Sandbox Code Playgroud)

但要小心; 大多数人在谈论ANSI是指一个在的的Windows代码页 ; 您可能真的在CP(代码页)1252中有一个文件,这几乎ISO-8859-1(拉丁文1)完全不同.如果是这样,请使用cp1252而不是latin-1作为encoding参数.