的Python 2.7:使用python 2.7,为什么我的unicode文件名在调用file()时引发IOError?
我试图打开一个MP3使用诱变剂的ID3标签读取(所以我宁愿没有改变的方法),该方法调用:
file(filename, "rb")
对于文件无特殊字符能正常工作,但除此之外,我有时似乎得到
IOError: [Errno 2] No such file or directory: u"somepath\\08 - Muse - I Belong To You - Mon C\x9cur S'ouvre \xc0 Ta Voix.mp3"
而其他时候
u"somepath\\02 - Max\xefmo Park - Apply Some Pressure.mp3"
工作正常。
两者有什么区别?为什么一个人工作,而另一个不工作?
干杯,
菲利克斯
编辑:在Eclipse下的PyDev运行时,对于其
sys.getdefaultencoding()
退换 “的Cp1252”,而不是从返回 “ASCII” 命令行它的工作。当打印到Eclipse控制台的文件名是
u"somepath\\08 - Muse - I Belong To You - Mon C\u0153ur S'ouvre \xc0 Ta Voix.mp3"
编辑:后者从Winamp的(音乐播放器)文件名中的代码是:
winampProcess = win32api.OpenProcess(win32con.PROCESS_VM_READ, False, processID)
memoryBuffer = ctypes.create_string_buffer(256)
ctypes.windll.kernel32.ReadProcessMemory(winampProcess.handle, memoryPointer, memoryBuffer, 256, 0)
winampProcess.Close()
rawPath = win32api.GetFullPathName(memoryBuffer.raw.split("\x00")[0])
try:
unicodeString = unicode(rawPath)
except UnicodeDecodeError:
unicodeString = u""
for char in rawPath:
try:
unicodeString += unicode(char)
except UnicodeDecodeError as err:
errStr = str(err)
startIndex = errStr.index("0x")
endIndex = errStr.index(" ", startIndex)
hexStr = ""
for i in range(startIndex, endIndex):
hexStr += errStr[i]
unicodeString += unichr(int(hexStr, 16))
return unicodeString
编辑:如果我明确设置的问题得到解决
unicode(str, "cp1252")
,但我还是不明白是什么原因造成的问题,这是一个哈克修复,可能不会为其他狡猾的文件名工作...
帮助我们来帮助你,给我们看一些代码;) – user225312 2011-01-12 17:02:51
这是在Vista上,顺便说一句,但我需要我的代码是可移植的。 – erbridge 2011-01-12 17:03:48
我不确定需要更多...? – erbridge 2011-01-12 17:05:39