为何在主目录含特殊字符时,os.path.expanduser表现异常?

4 投票
1 回答
1040 浏览
提问于 2025-04-17 03:22

目前,我的用户目录在 "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',我也不知道为什么。

那么,这个问题的原因是什么,解决办法又是什么呢?是程序的问题,还是系统设置可能出错了?

总结一下:在标准的 Python 解释器中,家目录正确显示为 'C:\Users\João',而在 Eclipse 中运行时却显示为 'C:\Users\JoÆo'。这是为什么呢?

1 个回答

0

试着改变Eclipse的默认编码方式。你可以在文件菜单里找到:窗口 --> 首选项;然后在树状菜单中选择:常规 -> 工作区;把“文本文件编码”从Cp1252改成ISO-8859-1。

如果你想为特定的调试配置更改编码,可以打开“调试配置”,然后去“常规”选项卡,修改“编码”设置。

补充:这很奇怪。在一个包含“João”文件夹的目录里,我用Eclipse执行“./J*”这个命令时,使用UTF-8和Cp1252(默认编码)都能正常工作,环境是64位的Python 2.7.2,操作系统是Windows 7。

UTF-8:

['.\Jo\xe3o']

Cp1252:

['.\Jo\xe3o']

撰写回答