文件名如下:
filename = u"/direc/tories/español.jpg"
使用open()as:
fp = open(filename, "rb")
这将在OSX(10.7)上正确打开文件,但在Ubuntu 11.04上,open()函数将尝试打开u"espa\xf1ol.jpg"
,这将导致IOError失败。
通过尝试修复此问题的过程我已在两个系统上检查sys.getfilesystemencoding()
,两者都设置为utf-8(尽管Ubuntu报告大写,即UTF-8,不确定是否相关)。我还在python文件中设置了# -*- coding: utf-8 -*-
,但我确信这只会影响文件本身的编码,而不影响任何外部函数或python如何处理系统资源。该文件存在于两个系统上,并且eñe正确显示。
最后的问题是:如何在Ubuntu系统上打开español.jpg
文件?
编辑:
español.jpg
字符串实际上是通过Django的ORM(ImageFileField)从数据库中出来的,但是当我处理它并看到行为上的差异时,我有一个unicode字符串,它是一个绝对路径文件。
答案 0 :(得分:2)
下面这个应该适用于两种情况:
fp = open(filename.encode(sys.getfilesystemencoding()), "rb")
答案 1 :(得分:1)
仅仅将文件编码设置在文件顶部是不够的。确保您的编辑器使用相同的编码,并将文本保存在该编码中。如有必要,请重新键入任何非ascii字符,以确保您的编辑正在做正确的事情。
如果您的价值来自例如在数据库中,您仍然需要确保沿着该行的任何地方都不会被编码为非unicode。