如何打开ascii编码的文件为UTF8?

Jes*_*ose 3 python io file-io ascii utf-8

我的文件是US-ASCII和一个命令a = file( 'main.html'),a.read()并将它们作为ASCII文本加载.如何将其加载为UTF8?

我要解决的问题是:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 38: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我正在使用文件的内容进行模板化template_str.format(attrib=val).但是要插入的字符串是ASCII的超集.

我们团队的版本控制和文本编辑器不关心编码.那么如何在代码中处理它呢?

Fab*_*ian 6

在Python2中使用的解决方案:

import codecs
fo = codecs.open('filename.txt', 'r', 'ascii')
content = fo.read()  ## returns unicode
assert type(content) == unicode
fo.close()

utf8_content = content.encode('utf-8')
assert type(utf8_content) == str
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 6

您试图在不指定编码的情况下打开文件,这意味着python使用默认值(ASCII).

您需要使用以下.decode()函数显式解码字节字符串:

 template_str = template_str.decode('utf8')
Run Code Online (Sandbox Code Playgroud)

val试图插入到模板中的变量本身就是一个unicode值,python想要自动将你的字节串模板(从文件中读取)转换为unicode值,这样它就可以将两者结合起来,并且它会使用这样做的默认编码.

我是否已经提到你应该阅读Joel Spolsky 关于UnicodePython Unicode HOWTO文章?他们会帮助你理解这里发生的事情.