gpt4 book ai didi

Python 无法打开路径中包含非英文字符的文件

转载 作者:太空狗 更新时间:2023-10-29 18:31:52 24 4
gpt4 key购买 nike

我有一个文件,路径如下:D:/bar/クレイジー・ヒッツ!/foo.abc

我正在从一个 XML 文件中解析路径,并将其存储在一个名为 path 的变量中,格式为 file://localhost/D:/bar/クレイジー・ヒッツ!/foo.abc然后,正在进行以下操作:

path=path.strip()
path=path[17:] #to remove the file://localhost/ part
path=urllib.url2pathname(path)
path=urllib.unquote(path)

错误是:

IOError: [Errno 2] No such file or directory: 'D:\\bar\\\xe3\x82\xaf\xe3\x83\xac\xe3\x82\xa4\xe3\x82\xb8\xe3\x83\xbc\xe3\x83\xbb\xe3\x83\x92\xe3\x83\x83\xe3\x83\x84\xef\xbc\x81\\foo.abc'

我在 Windows 7 上使用 Python 2.7

最佳答案

你报错的路径是:

'\xe3\x82\xaf\xe3\x83\xac\xe3\x82\xa4\xe3\x82\xb8\xe3\x83\xbc\xe3\x83\xbb\xe3\x83\x92\xe3\x83\x83\xe3\x83\x84\xef\xbc\x81'

我认为这是你的文件名的 UTF8 编码版本。

我在 Windows7 上创建了一个同名文件夹,并在其中放置了一个名为“abc.txt”的文件:

>>> a = '\xe3\x82\xaf\xe3\x83\xac\xe3\x82\xa4\xe3\x82\xb8\xe3\x83\xbc\xe3\x83\xbb\xe3\x83\x92\xe3\x83\x83\xe3\x83\x84\xef\xbc\x81'
>>> os.listdir('.')
['?????\xb7???!']
>>> os.listdir(u'.') # Pass unicode to have unicode returned to you
[u'\u30af\u30ec\u30a4\u30b8\u30fc\u30fb\u30d2\u30c3\u30c4\uff01']
>>>
>>> a.decode('utf8') # UTF8 decoding your string matches the listdir output
u'\u30af\u30ec\u30a4\u30b8\u30fc\u30fb\u30d2\u30c3\u30c4\uff01'
>>> os.listdir(a.decode('utf8'))
[u'abc.txt']

看来 Duncan 对 path.decode('utf8') 的建议起到了作用。


更新

我无法为你测试这个,但我建议你在执行 .decode('utf8') 之前尝试检查路径是否包含非 ascii。这有点hacky...

ASCII_TRANS = '_'*32 + ''.join([chr(x) for x in range(32,126)]) + '_'*130
path=path.strip()
path=path[17:] #to remove the file://localhost/ part
path=urllib.unquote(path)
if path.translate(ASCII_TRANS) != path: # Contains non-ascii
path = path.decode('utf8')
path=urllib.url2pathname(path)

关于Python 无法打开路径中包含非英文字符的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5974585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com