将文本文件中的ascii字符转换为Unicode

时间:2013-05-15 16:31:00

标签: python django unicode ascii

我们正在使用Django 1.5创建一个网站。我们在服务器上存储了几个大文本文件,这些文本文件将通过网页呈现,具体取决于国家/地区。问题是这些文本文件包含版权符号(c),并且我们不断收到“非ascii字符”错误,并且文本未加载。有没有人对如何成功地将一个转换为另一个有任何建议?

选择代码:

#Open file, where filename is our variable            
with open(filename) as f:
        #Append (It is in a loop, and we are only passing 1 document variable
        document=document + f.read()
        f.close

我们尝试过使用:

  • 标记安全(在django)

  • smart_str

  • .encode('utf8')

但无济于事,页面继续如此吐出一个错误,说有一个无法转换的ascii字符。有任何想法吗?

这是我们不断得到的错误

UnicodeDecodeError at /<website-hidden>/
'ascii' codec can't decode byte 0x92 in position 950: ordinal not in range(128)

2 个答案:

答案 0 :(得分:2)

问题是版权符号不是严格的ASCII字符,因为它的第8位(最重要)位是1.ASCII仅使用7位。您需要告诉python该文件不是ASCII数据,而是“扩展ASCII”,“ISO 8859-1”或“ISO Latin-1”数据。

因此,您需要将其作为字节读取,然后使用该解码将其转换为字符串。然后,您可以将其重新编码为您想要的任何内容,包括UTF-8。

对此的准确处理取决于您使用的是python 2.x还是3.x。

参考 http://www.ascii-code.com/ https://en.wikipedia.org/wiki/Extended_ASCII

答案 1 :(得分:1)

重新启动计算机和eclipse似乎可以解决问题。也许这是缓存的问题?无论哪种方式,奇怪的错误......