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

时间:2011-09-29 17:46:42

标签: python windows eclipse internationalization pydev

目前,我的用户目录位于“C:\ Users \João”中,我在Windows 7下运行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'是Latin-1和Windows-1252中'ã'的代码,一切都很顺利。 但是,在Eclipse中,

>>> 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'

这令人困惑,因为'\ xc6'是'Æ'的字符代码,除此之外,它不是有效的UTF-8。

如果你想知道“权限被拒绝”,而不是“没有这样的文件或目录”,一些程序也写了“C:\ Users \JoÆo”的东西,我也不知道为什么。

那么原因是什么,解决方案是什么?它甚至是程序设计还是你认为这可能是错误的系统设置?

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

1 个答案:

答案 0 :(得分:0)

尝试更改Eclipse的默认编码。文件菜单:Windows - &gt;喜好;树吧:一般 - &gt;工作区;将“文本文件编码”从Cp1252更改为ISO-8859-1。

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

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

  

UTF-8:

     

[ '\乔\ xe3o']

     

的Cp1252:

     

[ '\乔\ xe3o']