5

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

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 中是否有一个按程序设置的函数(sys.setdefaultencodingsite模块中使用,然后从命名空间中删除)。

4

3 回答 3

16

使用open(filename, 'r', encoding='utf8'). 有关 open 的信息,请参阅Python 3 文档

于 2009-06-11T21:17:44.493 回答
1

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

import codecs
codecs.open('filename','r',encoding='UTF-8')
于 2011-10-14T13:22:42.560 回答
1

你可以使用类似的东西

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)

更多信息是关于python unicode 文档

于 2015-02-26T23:11:59.877 回答