处理多语言目录(Python)

处理多语言目录(Python),python,unicode,decode,Python,Unicode,Decode,我正试图打开一个文件,我刚刚意识到py在我的用户名上有问题(它是俄语的)。有没有关于如何正确解码/编码以使idle开心的建议 我使用的是py 2.6.5 xmlfile = open(u"D:\\Users\\Эрик\\Downloads\\temp.xml", "r") Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> xmlfile = open(st

我正试图打开一个文件,我刚刚意识到py在我的用户名上有问题(它是俄语的)。有没有关于如何正确解码/编码以使idle开心的建议

我使用的是py 2.6.5

xmlfile = open(u"D:\\Users\\Эрик\\Downloads\\temp.xml", "r")

Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    xmlfile = open(str(u"D:\\Users\\Эрик\\Downloads\\temp.xml"), "r")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 9-12: ordinal not in range(128)
xmlfile=open(u“D:\\Users\\БУimk_\\Downloads\\temp.xml”,“r”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
xmlfile=open(str(u“D:\\Users\\БУimk_\\Downloads\\temp.xml”),“r”)
UnicodeEncodeError:“ascii”编解码器无法对位置9-12中的字符进行编码:序号不在范围内(128)
os.sys.getfilesystemencoding() “mbcs”

xmlfile=open(u“D:\Users\öУцimk_\Downloads\temp.xml”。编码(“mbcs”),“r”)

回溯(最近一次呼叫最后一次): 文件“”,第1行,在 xmlfile=open(u“D:\Users\öУцimk_\Downloads\temp.xml”。编码(“mbcs”),“r”)
IOError:[Errno 22]无效模式('r')或文件名:“D:\Users\Y?ee\Downloads\temp.xml”

第一个问题是解析器试图解释字符串中的反斜杠,除非您使用
r“raw quote”
前缀。在2.6.5中,您不需要特别处理Unicode字符串,但可能需要在源代码中声明文件编码,如:

# -*- coding: utf-8 -*-
如中所定义。下面是一个交互工作的示例:

$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3] on linux2
>>> f = r"D:\Users\Эрик\Downloads\temp.xml"
>>> f
'D:\\Users\\\xd0\xad\xd1\x80\xd0\xb8\xd0\xba\\Downloads\\temp.xml'
>>> x = open(f, 'w')
>>> x.close()
>>> 
$ ls D*
D:\Users\Эрик\Downloads\temp.xml

是的,这是在Unix系统上,因此
\
没有意义,我的终端编码是utf-8,但它可以工作。您可能只需要在解析器读取文件时向其提供编码提示。

第一个问题:

xmlfile = open(u"D:\\Users\\Эрик\\Downloads\\temp.xml", "r")
### The above line should be OK, provided that you have the correct coding line
### For example # coding: cp1251

Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    xmlfile = open(str(u"D:\\Users\\Эрик\\Downloads\\temp.xml"), "r")
### HOWEVER the above traceback line shows you actually using str()
### which is DIRECTLY causing the error because it is attempting
### to decode your filename using the default ASCII codec -- DON'T DO THAT.
### Please copy/paste; don't type from memory.
UnicodeEncodeError: 'ascii' codec can't encode characters in position 9-12: ordinal not in range(128)
关于在Windows中硬编码文件名的一般建议,按首选项的降序排列:

(1) 不要
(2) 使用
/
例如
“c:/temp.xml”

(3) 使用带有反斜杠的原始字符串
r“c:\temp.xml”

(4) 使用双反斜杠
“c:\\temp.xml”

xmlfile = open(u"D:\Users\Эрик\Downloads\temp.xml".encode("mbcs"), "r")
### (a) \t is interpreted as a TAB character, hence the file name is invalid.
### (b) encoding with mbcs seems not to be useful; it messes up your name ("Y?ee").

Traceback (most recent call last):
File "", line 1, in xmlfile = open(u"D:\Users\Эрик\Downloads\temp.xml".encode("mbcs"), "r")
IOError: [Errno 22] invalid mode ('r') or filename: 'D:\Users\Y?ee\Downloads\temp.xml'