【发布时间】:2009-06-11 21:12:58
【问题描述】:
我的网页由一个动态导入一堆文件的脚本提供服务
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 in read(self=, n=-1) ... UnicodeDecodeError:“ascii”编解码器无法解码位置 627 中的字节 0xe1:序数不在范围内(128)所有文件都是从我的笔记本电脑上复制的,Apache 完美地提供了这些文件。是什么原因?
更新:我发现open() 的默认编码取决于平台,所以在我的笔记本电脑上是utf8,在服务器上是ascii。我想知道在 Python 3 中是否有一个 per-program 函数来设置它(sys.setdefaultencoding 在site 模块中使用,然后从命名空间中删除)。
【问题讨论】:
-
import通常用于导入文件。有什么理由不适合你? -
看看sys.getfilesystemencoding。在 Linux 上,您应该确保语言环境变量
LC_CTYPE具有合理的值,因为它定义了文件名的含义并且也被 Python 使用。LC_CTYPE来自同名环境变量或由LC_ALL推断。运行locale命令将告诉您当前值。
标签: unicode python-3.x