【问题标题】:How to change encoding of characters from file如何更改文件中字符的编码
【发布时间】:2015-08-27 11:25:42
【问题描述】:

我已经阅读了很多关于编码的内容,但我仍然不确定我是否完全了解它。我有一个编码为 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())

结果:“Soluções”

我想这是一个愚蠢的问题,但我目前处于僵局。我试图在写入文件之前对文件中的单个数据调用 encode('utf-8') 无济于事,所以我猜这也不正确......感谢任何帮助,谢谢!

【问题讨论】:

  • 你是如何读取输出文件的?您是在 utf-8 编辑器/查看器中打开它吗?大多数编辑器允许您更改打开文件时使用的编码。
  • 我在 Windows 上猜测 notepad++

标签: python encoding utf-8


【解决方案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

【讨论】:

  • 成功了,它是“cp-1252”。很有帮助,谢谢!所有这些编码业务都非常有趣。
【解决方案2】:

你可以试试

  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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多