windows - win下python新建文件时文件名编码问题
PHP中文网
PHP中文网 2017-04-17 11:20:37
[Python讨论组]

win下,下面程序:

#! /usr/bin/env python
# coding:utf8
name = '中文ero.txt'
name = name[:].decode('utf-8').encode('gb2312')
f = open(name, 'w')
f.write("正文如下:abcdefVerão")
f.close()

可以正常新建一个带有中文名字的文件,这点可以理解。但是如果文件名包含有ã(鬼知道这是哪国的字符,不过应该不是中文字符,在一个.mp3文件名中看到了这个字符),即

name = '中文eroã.txt'

则出现以下错误:

UnicodeEncodeError: 'gb2312' codec can't encode character u'\xe3' in position 5:
illegal multibyte sequence

应该是因为ã不是中文字符,因此gb2312无法编码它。

但是问题是,为什么直接新建文件时就可以使用这个字符作为文件名呢,并且在控制台dir命令还可以看到这个字符(话说控制台的输出编码不是gb2312吗)。

win7 中文版文件名的内部存储是怎么编码的呢?

-----
还是linux好啊,不用遇见这么蛋疼的问题...

PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
怪我咯

Windows NT内核采用的是UTF-16编码Unicode字符串。
你说遇到的问题只是GB2312覆盖范围太少,请GB18030编码。

补充说明:
文件名完全可以使用unicode字符串:

name = u'中文eroã.txt'
f = open(name, 'w')
-----
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号