Python 3不读取新服务器上的unicode文件

ily*_* n. 5 unicode python-3.x

我的网页由一个动态导入大量文件的脚本提供服务

try:
    with open (filename, 'r') as f:
        exec(f.read())
except IOError: pass
Run Code Online (Sandbox Code Playgroud)

(实际上,你能建议一个更好的导入文件的方法吗?我确定有一个.)

有时文件包含不同语言的字符串,例如

# contents of language.ru
title = "????????"
Run Code Online (Sandbox Code Playgroud)

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

    OK: [server command line] python3.0 page.py /index.ru
    OK: http://whitebox.local/index.ru

但是当我尝试从我们刚搬到的服务器上提供页面时,它会抛出一个错误:

      157     try:
      158         with open (filename, 'r') as f:
      159             exec(f.read())
      160     except IOError: pass
      161 
      /usr/local/lib/python3.0/io.py in read(self=, n=-1)
      ...
      UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 627: ordinal not in range(128) 

所有文件都是从我的笔记本电脑中复制出来的,而Apache则完美地为它们服务 是什么原因?

更新:我发现默认编码open()是依赖于平台的,所以它utf8在我的笔记本电脑和ascii服务器上.我想知道是否有一个per-program函数在Python 3中设置它(sys.setdefaultencodingsite模块中使用然后从命名空间中删除).

Ale*_*lli 16

使用open(filename, 'r', encoding='utf8').请参阅Python 3文档以获取开放.