Python 2.6.5支持Unicode吗?为什么listdir()没有,但Python 3.1.2确实显示了Unicode?

时间:2010-06-28 11:51:08

标签: python unicode

据说Python 2.6.5支持Unicode?为什么listdir()不在IDLE中,但Python 3.1.2确实在IDLE中显示Unicode? (这是在Windows 7上测试的)

以下代码的行为相同:

for dirname, dirnames, filenames in os.walk('c:\path\somewhere'):
    for subdirname in dirnames:
        print (os.path.join(dirname, subdirname))
    for filename in filenames:
        print (os.path.join(dirname, filename))

更新: unicode位于文件名中,而不在路径中...

3 个答案:

答案 0 :(得分:5)

Unicode字符串的语法从2更改为3.尝试指定如下的Unicode字符串:

u'c:\\path\\somewhere'

如果你想要Python 3的语法(除非给出b前缀,否则字符串文字默认为Unicode),使用

from __future__ import unicode_literals

位于文件顶部。

答案 1 :(得分:2)

Python 3默认情况下使所有字符串成为Unicode,这可能就是为什么它可以与开箱即用的Python 3一起使用。

listdir州的文档

  

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

所以我猜你必须在Python 2中明确地将你的路径作为Unicode字符串给出,以便将结果作为Unicode。

答案 2 :(得分:0)

Python 2.x支持unicode,但unicode不是默认值(就像3.x一样)。

在Python 2.x中,字符串默认为8位字节数组,因此在使用文件系统时,您将看到UTF-8编码的文件名。

在Python 3.x中,默认情况下所有字符串都是unicode,因此UTF-8解码发生在IO子例程中。