2

我们正在使用 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)
4

2 回答 2

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

于 2013-05-15T16:36:54.877 回答
1

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

于 2013-06-19T21:25:02.523 回答