5.14 忽略文件名编码

    默认情况下,所有的文件名都会根据 返回的文本编码来编码或解码。比如:

    如果因为某种原因你想忽略这种编码,可以使用一个原始字节字符串来指定一个文件名即可。比如:

    1. >>> # Wrte a file using a unicode filename
    2. >>> with open('jalape\xf1o.txt', 'w') as f:
    3. ... f.write('Spicy!')
    4. ...
    5. >>> # Directory listing (decoded)
    6. >>> import os
    7. >>> os.listdir('.')
    8. ['jalapeño.txt']
    9.  
    10. >>> # Directory listing (raw)
    11. >>> os.listdir(b'.') # Note: byte string
    12.  
    13. >>> # Open file with raw filename
    14. >>> with open(b'jalapen\xcc\x83o.txt') as f:
    15. ... print(f.read())
    16. ...
    17. Spicy!
    18. >>>

    通常来讲,你不需要担心文件名的编码和解码,普通的文件名操作应该就没问题了。但是,有些操作系统允许用户通过偶然或恶意方式去创建名字不符合默认编码的文件。这些文件名可能会神秘地中断那些需要处理大量文件的Python程序。

    读取目录并通过原始未解码方式处理文件名可以有效的避免这样的问题,尽管这样会带来一定的编程难度。

    原文: