我的网页由一个脚本提供服务,该脚本通过以下方式动态导入一堆文件:

try:
    with open (filename, 'r') as f:
        exec(f.read())
except IOError: pass

(实际上,您能建议一种更好的文件导入方法吗?我敢肯定有一种方法。)

有时文件中包含不同语言的字符串,例如
# contents of language.ru
title = "Название"

这些都保存为UTF-8文件。 Python在命令行中运行脚本或从我的MacBook提供页面没有问题:

OK:[服务器命令行] python3.0 page.py/index.ru
确定:http://whitebox.local/index.ru

但是尝试从我们刚刚移至的服务器提供页面时会引发错误:

157尝试:
158打开(文件名,'r')为f:
159执行(f.read())
160,除了IOError:通过
161
在/usr/local/lib/python3.0/io.py中读取(self =,n = -1)
...
UnicodeDecodeError:'ascii'编解码器无法解码位置627的字节0xe1:序数不在范围内(128)

所有文件都是从我的笔记本电脑中复制的,Apache可以完美地为它们提供服务。是什么原因?

更新:我发现open()的默认编码与平台有关,因此它是笔记本电脑上的utf8和服务器上的ascii。我想知道是否在Python 3中有一个按程序设置的函数(sys.setdefaultencoding模块中使用了site,然后从命名空间中删除了它)。

最佳答案

使用open(filename, 'r', encoding='utf8')
参见Python 3 docs for open

关于unicode - Python 3不会在新服务器上读取unicode文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/983720/

10-13 08:09
查看更多