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
命令将告诉您当前值。