用 python3 写的一个下载P站图片的工具
下载这个地址的时候报错了
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\Qi\Dropbox\Python\Projects\PixivAgent\Download\\u2727\uf981神\u2727 48802520\48802520.jpg'
幸好这个时候 dropbox 也报了异常, 才发现是 windows 下的"女(U+F981)"被自动转成了"女(U+5973)"
该怎么解决呢
1
imn1 2015-05-04 13:37:56 +08:00
unicode F900-FAFF 是 CJK Compatibility Ideographs
主要是对一些零散的异体字(多出现在印刷)作修正用的 你这个字串的来源有点问题,5973(4E00-9FCC)才是正式的汉字字符范围 应该先处理来源字串,再应用到路径使用,路径不应使用\uxxxx这种写法 |
2
GeQi OP @imn1 谢回复
\uF981是直接网站上抓下来的, 本身网站也不是国内的 至于报错信息里 \uxxxx 的写法只是 python3 在 cmd 里无字符的unicode的表示法而已 路径是没问题的 linux还没试, 不过 windows 隐式转换 unicode 字符真是头疼, 完全不理解这是什么逻辑 |
3
imn1 2015-05-04 14:17:50 +08:00
因为windows的文件系统是混合编码,具体的原理我搞不清,反正不止一种编码
而字体又跟编码有关,一般字体(至少windows自带那些)并不支持unicode,如果unicode规定了一些字符只是印刷修正用,与正式范围的某个字是相同的话,出于显示需要自动修正也是可以理解的,不然字体不能识别就会显示成问号了,有些时候还会造成路径错误(因为windows路径限制使用的字符比较多) |
4
cylin 2015-05-04 14:46:19 +08:00
windows7 简体中文 python3.4.2 测试正常,没有被转换
>>> fp=open('\u2727\uf981神\u2727.txt','wb') >>> fp.write(b'test') 4 >>> fp.close() >>> fp=open('\u2727\uf981神\u2727.txt','rb') >>> fp.read(4) b'test' >>> |