如何以UTF8格式打开ascii编码的文件?

2024-04-24 09:20:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我的文件是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的超集。

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


Tags: 文件in文本命令readmainhtml格式
3条回答

我想您肯定您的文件是用ASCII编码的。你是吗?:)由于UTF-8中包含ASCII,因此可以使用UTF-8解码此数据,而不会出现预期的问题。但是,当您确定数据只是ASCII时,应该仅使用ASCII而不是UTF-8来解码数据。

“如何将其加载为UTF8?”

我相信你的意思是“如何将其加载为unicode?”。只需使用ASCII编解码器对数据进行解码,在Python 2.x中,生成的数据将是unicode类型。在Python 3中,生成的数据将是str类型。

为了学习如何在Python中执行这种解码,您必须阅读有关此主题的内容。一旦理解了,就很简单了。

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

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

 template_str = template_str.decode('utf8')

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

我有没有说过你应该读乔尔·斯波尔斯基的article on UnicodePython Unicode HOWTO?他们会帮助你了解这里发生了什么。

在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

相关问题 更多 >