为什么当主目录包含特殊字符时,os.path.expanduser表现不佳?

4

目前,我的用户目录位于“C:\Users\João”,我正在运行 Windows 7 下的 Python 2.7 的 64 位版本。

通常情况下,Python 解释器默认编码为 'ascii'。然而,在 Eclipse 运行 Python 时,默认编码为 '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'。为什么?


尝试使用“os.path.expanduser(u'~/filename')”(字符串前面加u)...虽然我不知道它是否有效... - Martin Tournoij
@Carpetsmoker 无法成功。在控制台中,显示" UnicodeDecodeError: 'ascii'编解码器无法解码位于第11个位置的字节0xe3:顺序不在范围内(128)"。在Eclipse中,情况相同,只是出现了'utf-8'和0xc6,并且原因是“无效的连续字节”。 - Johnny
1个回答

0

尝试更改Eclipse的默认编码。 文件菜单:Windows --> Preferences; 树形栏:General -> Workspace; 将“Text file encoding”从Cp1252更改为ISO-8859-1。

如果您打开“Debug Configurations”,可以针对特定的调试配置进行更改,转到“Common”选项卡,更改“Encoding”。

编辑:非常奇怪。在具有“João”目录的目录中执行“./J*”的全局操作在64位Python 2.7.2,Windows 7中使用UTF-8和Cp1252(默认值)在Eclipse中正常工作。

UTF-8:

['.\Jo\xe3o']

Cp1252:

['.\Jo\xe3o']


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接