我在32位CentOS 5.8上的Python文件open()有问题。在文件名中使用ascii以外的字符时,我收到以下错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe7' in position 88: ordinal not in range(128)
违规行是
file = open(full_path, 'w')
代码在64位Ubuntu 12.10和64位CentOS 6.3上运行良好。
发生错误的服务器的一些信息:
$ python --version
Python 2.7.3
$ cat /etc/redhat-release
CentOS release 5.8 (Final)
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
我已经在Ubuntu机器上检查过“full_path”变量的类型是'unicode'。 “full_path”变量的一部分来自UTF-8格式的配置文件。其余来自UTF-8格式的网页。
我还没有对CentOS 5.8机器进行任何测试,因为它是生产服务器,我宁愿不对它进行随机测试。任何有关此错误原因的提示都表示赞赏。
更新
如果忘了提及以下作品:
$ python
Python 2.7.3 (default, Jun 11 2012, 22:26:11)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> file = open(u'ø.txt', 'w')
>>>
在我脑海中应该与实际程序相同,但显然不是。
更新2
现在它出于某种原因起作用了。该程序是一个Turbogears Web应用程序,我刚刚启动并停止服务器守护程序以查看某些调试打印的结果,并且错误不再发生。
我仍然不知道为什么会发生这种情况,但至少问题是暂时解决的。
答案 0 :(得分:0)
我不确定这是否可以作为解决方案,但我有这样的错误。我解决了它,但我现在有一些副作用(看看我的个人资料)。 尝试:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')