Python 当主目录具有特殊字符时,为什么os.path.expanduser行为不正常?

Python 当主目录具有特殊字符时,为什么os.path.expanduser行为不正常?,python,windows,eclipse,internationalization,pydev,Python,Windows,Eclipse,Internationalization,Pydev,目前,我的用户目录位于“C:\Users\João”中,我正在Windows7下运行Python 2.7的64位构建 通常,Python解释器以“ascii”作为默认编码运行。然而,由于某些原因,当Eclipse运行它时,默认编码是“utf-8”。现在,在常规Python控制台中,会发生以下情况: >>> sys.getdefaultencoding() 'ascii' >>> os.path.expanduser('~/filename') 'C:\\Use

目前,我的用户目录位于“C:\Users\João”中,我正在Windows7下运行Python 2.7的64位构建

通常,Python解释器以“ascii”作为默认编码运行。然而,由于某些原因,当Eclipse运行它时,默认编码是“utf-8”。现在,在常规Python控制台中,会发生以下情况:

>>> sys.getdefaultencoding()
'ascii'
>>> os.path.expanduser('~/filename')
'C:\\Users\\Jo\xe3o/filename'
>>> x = open(_, 'w')
>>> x.close()
>>>
我会注意到“\xe3”在拉丁语-1和Windows-1252中都是“ã”的代码,一切正常。 但是在月食中,

>>> sys.getdefaultencoding()
'utf-8'
>>> os.path.expanduser('~/filename')
'C:\\Users\\Jo\xc6o/filename'
>>> x = open(_, 'w')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 13] Permission denied: 'C:\\Users\\Jo\xc6o/filename'
>>sys.getdefaultencoding()
“utf-8”
>>>expanduser(“~/filename”)
'C:\\Users\\Jo\xc6o/filename'
>>>x=打开(u,'w')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
IOError:[Errno 13]权限被拒绝:“C:\\Users\\Jo\xc6o/filename”
这很让人困惑,因为“\xc6”是“Æ”的字符代码,除此之外,它是无效的UTF-8

如果您想知道“权限被拒绝”,而不是“没有这样的文件或目录”,那么有几个程序也会将内容写入“C:\Users\JoÆo”,我也不知道为什么

那么原因是什么,解决办法是什么?它甚至是程序化的,或者你认为它是一些系统设置可能是错误的


TL;DR:Home目录在标准Python解释器中正确地报告为“C:\Users\João”,在Eclipse中运行解释器时正确地报告为“C:\Users\JoÆo”。为什么?

尝试更改Eclipse的默认编码。文件菜单:Windows-->首选项;树栏:常规->工作空间;将“文本文件编码”从Cp1252更改为ISO-8859-1

如果打开“调试配置”,转到“公共”选项卡,更改“编码”,也可以更改特定调试配置的设置

编辑:很奇怪。在带有“João”目录的目录中对“/J*”执行glob对我来说很好,在64位Python 2.7.2和Windows 7中的Eclipse中使用UTF-8和Cp1252(默认值)

UTF-8:

['.\Jo\xe3o']

Cp1252:

['.\Jo\xe3o']


请尝试
os.path.expanduser(u'~/filename')
(字符串前面的u)。。。“我不知道它是否会起作用,但是……”吸烟者说。在控制台中,“UnicodeDecodeError:‘ascii’编解码器无法解码位置11:序号不在范围(128)中的字节0xe3”。在Eclipse中,除了“utf-8”和0xc6以及原因“无效的延续字节”之外,其他都是相同的。