如何在Python中遍历以日语命名的目录?

时间:2011-07-14 08:52:35

标签: python ios unicode character-encoding internationalization

我正在尝试构建一个简单的帮助器实用程序,它将查看我的项目并通过命令行查找并返回打开的项目。但是,每当文件夹或文件名为日语时,我对os.listdir的调用都会返回乱码(例如:'\x82\xa9\x82\xcc\x96I'),并且说乱码不能再次传递给调用进入文件夹。即os.listdir('C:\Documents and Settings\\x82\xa9\x82\xcc\x96I')返回错误:

'WindowsError: [Error 3] 指定されたパスが見つかりません。'

有人知道如何解决这个问题吗?非常感谢。

2 个答案:

答案 0 :(得分:6)

您可能需要将字符串解码为Unicode,然后在将其传递给os.listdir之前将其重新编码为UTF-8。看起来你的日语字符串是用shift-JIS编码的:

>>> '\x82\xa9\x82\xcc\x96I'.decode('shift-jis').encode('utf-8')
'\xe3\x81\x8b\xe3\x81\xae\xe8\x9c\x82'
>>> print '\x82\xa9\x82\xcc\x96I'.decode('shift-jis')
かの蜂

或者,首先使用os.listdir的以下功能从中获取Unicode字符串:

  

在Windows NT / 2k / XP和Unix上,如果 path 是Unicode对象,则结果将是Unicode对象列表。不可解码的文件名仍将作为字符串对象返回。

所以:

os.listdir(ur'C:\Documents and Settings')
# ---------^

答案 1 :(得分:2)

您应该尝试将目录名称作为Unicode-literal(u'your/path')传递。这样,结果也是Unicode(可能需要使用日语字符)。

来自documentation

  

在Windows NT / 2k / XP和Unix上,如果path是Unicode对象,则为结果   将是Unicode对象的列表。不可解码的文件名仍然是   作为字符串对象返回。