我有一个用Python2.7编写的应用程序,它使用os.walk从硬盘中读取用户的文件。
应用程序需要一个UTF-8系统区域设置(我们在启动之前检查env变量),因为我们处理带有Unicode字符的文件(例如,带有艺术家名称的音频文件),并且希望确保我们可以用正确的文件名将这些文件保存到文件系统中。
我们的一些用户有UTF-8地区(因此是一个UTF-8 fs),但仍然设法将ISO-8859-1文件存储在他们的驱动器上。当我们的代码尝试os.walk()这些目录时,当我们试图使用UTF-8解码这个序列的ISO-8859-1字节时,它会抛出一个异常,这会造成问题。
因此,我的问题是,如何让python忽略这个文件并转移到下一个文件,而不是中止整个os.walk()。我应该只转我自己的os.walk()函数吗?
编辑:到目前为止,我们一直在告诉我们的用户使用卷积linux命令来更正他们的文件名,但是许多用户有不同类型的编码(8859-1,8859-2等等),而使用卷积of要求用户在对每个文件单独运行卷积之前对哪些文件进行有一定的猜测。
发布于 2012-07-27 14:01:28
请阅读Unicode文件名,是Python的一部分。最重要的是,文件系统编码不一定与终端中当前的LANG设置相同。
具体来说,os.walk是建立在os.listdir之上的,因此它将在unicode和8位字节之间切换,这取决于您是否给它一个unicode路径。
将其改为8位路径,您的代码将正常工作,然后根据需要从UTF-8或ISO 8859-1解码。
发布于 2012-08-06 21:10:19
使用字符编码检测,python的chardet模块可以很好地确定实际的编码。“视情况而定”--你要么知道编码,要么就猜出来。如果你猜错了,至少你试过了。
https://stackoverflow.com/questions/11689223
复制相似问题