我的文件是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)
我使用文件的内容作为模板,如template_str.format(attrib=val)
。但是要插入的字符串是ASCII的超集。
我们团队的版本控制和文本编辑器不关心编码。那么在代码中如何处理呢?
我想您肯定您的文件是用ASCII编码的。你是吗?:)由于UTF-8中包含ASCII,因此可以使用UTF-8解码此数据,而不会出现预期的问题。但是,当您确定数据只是ASCII时,应该仅使用ASCII而不是UTF-8来解码数据。
“如何将其加载为UTF8?”
我相信你的意思是“如何将其加载为unicode?”。只需使用ASCII编解码器对数据进行解码,在Python 2.x中,生成的数据将是
unicode
类型。在Python 3中,生成的数据将是str
类型。为了学习如何在Python中执行这种解码,您必须阅读有关此主题的内容。一旦理解了,就很简单了。
您试图在不指定编码的情况下打开文件,这意味着python使用默认值(ASCII)。
您需要使用
.decode()
函数显式解码字节字符串:您试图插入到模板中的
val
变量本身就是一个unicode值,python希望将字节字符串模板(从文件读取)也自动转换为unicode值,以便它可以将两者结合起来,并且它将使用默认编码来这样做。我有没有说过你应该读乔尔·斯波尔斯基的article on Unicode和Python Unicode HOWTO?他们会帮助你了解这里发生了什么。
在Python2中工作的溶液:
相关问题 更多 >
编程相关推荐