我一直在阅读有关编码的内容,我仍然不确定我是否完全绕过它。我有一个编码为ANSI的文件,里面有“Solluções”字样。我想将文件转换为UTF-8,但每当我这样做时都会更改字符。
代码:
with codecs.open(filename_in,'r')
as input_file,
codecs.open(filename_out,'w','utf-8') as output_file:
output_file.write(input_file.read())
结果:“SolluçÃμes”
我认为这是一个愚蠢的问题,但我现在处于僵局。我试着在写入之前对文件中的各个数据调用encode('utf-8')无效,所以我猜这也不正确......我感谢任何帮助,谢谢!
答案 0 :(得分:1)
这个类似问题的SO answer指定了文件的输入类型,如codecs.open(sourceFileName, "r", "your-source-encoding")
。如果没有它,如果它无法检测原始编码,python可能无法正确解释字符。
关于编码的警告:大多数人谈论ANSI是指一个Windows代码页;您可能真的在CP(代码页)1252中有一个文件,这几乎与ISO-8859-1(拉丁文1)完全不同。如果是,请使用cp-1252
代替latin-1
作为your-source-encoding
。
答案 1 :(得分:1)
你可以尝试
from codecs import encode,decode
with open(filename_out,"w") as output_file:
decoded_unicode = decode(input_file.read(),"cp-1252") #im guessing this is what you mean by "ANSI"
utf8_bytes = encode(decoded_unicode,"utf8")
output_file.write(utf8_bytes)