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的超集.
我们团队的版本控制和文本编辑器不关心编码.那么如何在代码中处理它呢?
在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)
您试图在不指定编码的情况下打开文件,这意味着python使用默认值(ASCII).
您需要使用以下.decode()
函数显式解码字节字符串:
template_str = template_str.decode('utf8')
Run Code Online (Sandbox Code Playgroud)
你val
试图插入到模板中的变量本身就是一个unicode值,python想要自动将你的字节串模板(从文件中读取)转换为unicode值,这样它就可以将两者结合起来,并且它会使用这样做的默认编码.
我是否已经提到你应该阅读Joel Spolsky 关于Unicode和Python Unicode HOWTO的文章?他们会帮助你理解这里发生的事情.