Python 2.7 Python:如何从文件名中获得正确的编码

Python 2.7 Python:如何从文件名中获得正确的编码,python-2.7,encoding,operating-system,decoding,Python 2.7,Encoding,Operating System,Decoding,我试图打开一些带有奇怪字符的文件,但上面的代码只适用于拉丁语。我该怎么做才能获得所有文件的正确编码并正确打开它们?或者是否有解决方法 请注意,上述逻辑在linux系统上运行良好 文件名: 西里尔字母Б;中国人伊艾;法兰西;阿拉伯文;西班牙语ÁÍÓ.exe;registred®™.exe;germanäßü.exe在以Unicode字符串形式传递目录路径时起作用,例如: >>> a=os.listdir('.') >>> a ['arabic??.exe', '

我试图打开一些带有奇怪字符的文件,但上面的代码只适用于拉丁语。我该怎么做才能获得所有文件的正确编码并正确打开它们?或者是否有解决方法

请注意,上述逻辑在linux系统上运行良好

文件名:
西里尔字母Б;中国人伊艾;法兰西;阿拉伯文;西班牙语ÁÍÓ.exe;registred®™.exe;germanäßü.exe

在以Unicode字符串形式传递目录路径时起作用,例如:

>>> a=os.listdir('.')
>>> a
['arabic??.exe', 'asd.exe', 'chinese??.exe', 'cyrilic??.exe', 'french\xe7\xe9\xfc.exe', 'german\xe4\xdf\xfc.exe', 'registred\xae\xa9.exe', 'sandbox.py', 'spanish\xc1\xcd\xd3.exe']
>>> for each in a:
...  os.system(os.getcwd()+'\\'+each)
...
The system cannot find the path specified.

编辑#0:

您还需要将以下标题添加到Python脚本中:

os.listdir(u'.')

您可以在此处阅读更多信息:

如果您将目录路径作为Unicode字符串传递,则可以使用,例如:

>>> a=os.listdir('.')
>>> a
['arabic??.exe', 'asd.exe', 'chinese??.exe', 'cyrilic??.exe', 'french\xe7\xe9\xfc.exe', 'german\xe4\xdf\xfc.exe', 'registred\xae\xa9.exe', 'sandbox.py', 'spanish\xc1\xcd\xd3.exe']
>>> for each in a:
...  os.system(os.getcwd()+'\\'+each)
...
The system cannot find the path specified.

编辑#0:

您还需要将以下标题添加到Python脚本中:

os.listdir(u'.')

您可以在此处了解更多信息:

当我将其作为unicode:Traceback(最近一次调用最后一次):文件“”传递给我时,会出现此错误,在UnicodeEncodeError中,第2行:“ascii”编解码器无法对位置41-42的字符进行编码:序号不在范围内(128)如果我将其保留为byte,至少它会将参数传递到os.systems。您是否为Python脚本文件指定了编码?请检查更新的答案。是的,我尝试使用编码行,也尝试使用.encode(sys.getfilesystemencoding()对名称进行编码但是这没有明显的区别,我有点被困在这里,不管怎样,谢谢你的帮助。这很奇怪。如果我使用问题中的文件名和代码,我会得到与你相同的输出。但是将路径指定为Unicode并添加文件头解决了这个问题。顺便问一下,你使用的是哪个版本的Windows?你能告诉我吗共享sys.stdout.encoding和sys.stdin.encoding的输出?当我将其作为unicode:Traceback(最近一次调用):文件“”,UnicodeEncodeError中的第2行传递时,会出现此错误:“ascii”编解码器无法对位置41-42的字符进行编码:序号不在范围内(128)如果我将其保留为byte,至少它会将参数传递到os.SYSTEM。您是否指定了Python脚本文件的编码?请检查更新的答案。是的,我尝试了使用编码行,也尝试了使用.encode(sys.getfilesystemencoding())对名称进行编码但是这没有明显的区别,我有点被困在这里,不管怎样,谢谢你的帮助。这很奇怪。如果我使用问题中的文件名和代码,我会得到与你相同的输出。但是将路径指定为Unicode并添加文件头解决了这个问题。顺便问一下,你使用的是哪个版本的Windows?你能告诉我吗共享sys.stdout.encoding和sys.stdin.encoding的输出?