Linux下如何获取含Unicode字符的正确NTFS文件名?
解决Linux下NTFS分区文件名乱码的Python方法
核心原因
NTFS文件系统本身以UTF-16LE格式存储文件名,但如果挂载时未指定正确的字符集(比如误设为GBK/CP936,而系统默认用UTF-8解析),就会导致文件名显示乱码。你通过os.listdir(b'.')获取的字节串,其实是挂载时被错误转换后的GBK编码字节,而非NTFS原始的UTF-16LE数据。
正确处理步骤
针对你的示例,只需将获取到的字节串用**GBK(或CP936)**解码即可得到正确文件名:
import os # 以字节模式读取目录,避免系统自动错误解码 raw_filenames = os.listdir(b'.') for filename_bytes in raw_filenames: try: # 用GBK解码得到正确的Unicode文件名 correct_name = filename_bytes.decode('gbk') print(f"原始字节: {filename_bytes} -> 正确名称: {correct_name}") except UnicodeDecodeError: # 处理非GBK编码的文件名(如果有的话) print(f"无法解码文件名: {filename_bytes}")
针对你的测试用例,执行后会输出:
原始字节: b'\xd0\xc2\xbd\xa8\xce\xc4\xbc\xfe\xbc\xd0' -> 正确名称: 新建文件夹
补充说明
- 如果上述方法无效,可尝试其他常见中文编码(如
cp1252、gb2312),但GBK/CP936是NTFS在中文环境下最常见的错误转换编码。 - 若能临时修改挂载选项,建议挂载时指定
iocharset=utf8(如mount -t ntfs-3g /dev/sdXn /mnt/ntfs -o iocharset=utf8),从根源解决乱码问题,但你无法修改挂载选项时,上述Python方法是可行的替代方案。
内容的提问来源于stack exchange,提问作者Qin Heyang
相关产品推荐
相关产品推荐

