如何打开一个ASCII编码的文件为UTF8?(How to open an ascii-encode

2019-09-22 07:30发布

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

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

Answer 1:

您正在试图打开文件没有指定编码,这意味着Python使用默认值(ASCII)。

您需要字节串明确解码,使用.decode()函数:

 template_str = template_str.decode('utf8')

val变量,你试过插值到您的模板本身就是一个Unicode值和Python要自动将您的字节串的模板(从文件中读取)转换成Unicode值了,所以它可以结合两者,它会使用默认的编码这样做。

我提到已经你应该阅读乔尔斯波斯基的Unicode的文章和Python的Unicode指南 ? 他们会帮助你了解这里发生了什么。



Answer 2:

溶液中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


Answer 3:

我想,你肯定你的文件在ASCII编码。 你是? :)至于ASCII包含在UTF-8,您可以使用UTF-8,不期待问题解码此数据。 然而,当你确信该数据仅仅是ASCII,你应该使用解码ASCII只是,而不是UTF-8的数据。

“我如何得到它加载为UTF8?”

我相信你的意思是“我如何得到它加载为Unicode?”。 只是用ASCII编码解码器解码的数据,在Python 2.x中,所产生的数据将是类型的unicode 。 在Python 3,所得到的数据将是类型的str

你将不得不为了学习如何在Python执行这种解码的阅读关于这个话题。 一旦了解,这是非常简单的。



文章来源: How to open an ascii-encoded file as UTF8?