Python 3没有';无法在新服务器上读取unicode文件

Python 3没有';无法在新服务器上读取unicode文件,unicode,python-3.x,Unicode,Python 3.x,我的网页由一个脚本提供服务,该脚本使用 try: with open (filename, 'r') as f: exec(f.read()) except IOError: pass (实际上,你能推荐一种更好的导入文件的方法吗?我肯定有一种。) 有时文件中有不同语言的字符串,如 # contents of language.ru title = "Название" 这些都保存为UTF-8文件。Python在命令行中运行脚本或从我的MacBook中提供页面时没有问

我的网页由一个脚本提供服务,该脚本使用

try:
    with open (filename, 'r') as f:
        exec(f.read())
except IOError: pass
(实际上,你能推荐一种更好的导入文件的方法吗?我肯定有一种。)

有时文件中有不同语言的字符串,如

# contents of language.ru
title = "Название"
这些都保存为UTF-8文件。Python在命令行中运行脚本或从我的MacBook中提供页面时没有问题:

OK: [server command line] python3.0 page.py /index.ru OK: http://whitebox.local/index.ru 确定:[服务器命令行]python3.0 page.py/index.ru 好 啊: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) 157尝试: 158打开(文件名为“r”)作为f: 159 exec(f.read()) 160除了IOError:通过 161 /读取中的usr/local/lib/python3.0/io.py(self=,n=-1) ... UnicodeDecodeError:“ascii”编解码器无法解码位置627处的字节0xe1:序号不在范围内(128) 所有文件都是从我的笔记本电脑上复制的,在那里,Apache提供了完美的服务。原因是什么

更新:我发现
open()
的默认编码取决于平台,所以它在我的笔记本电脑上是
utf8
,在服务器上是
ascii
。我想知道Python3中是否有每个程序的函数来设置它(
sys.setdefaultencoding
用于
site
模块,然后从名称空间中删除)。

使用
open(filename,'r',encoding='utf8')

请参阅。

使用编解码器库,我使用的是python 2.6.6,我不使用通常的open with encoding参数:

import codecs
codecs.open('filename','r',encoding='UTF-8')

你可以用像

with open(fname, 'r', encoding="ascii", errors="surrogateescape") as f:
    data = f.read()

# make changes to the string 'data'

with open(fname + '.new', 'w',
           encoding="ascii", errors="surrogateescape") as f:
    f.write(data)

有关导入的详细信息,请参见

导入
通常用于导入文件。有什么原因不适合你吗?看看。在Linux上,您应该确保locale变量
LC_CTYPE
具有一个sane值,因为它定义了文件名的含义,Python也使用它
LC_CTYPE
来自同名的环境变量,或者由
LC_ALL
推断。运行
locale
命令将告诉您当前值。