Windows 下的 Unicode 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GeQi
V2EX    编程

Windows 下的 Unicode 问题

  •  
  •   GeQi 2015-05-04 13:08:26 +08:00 3323 次点击
    这是一个创建于 3815 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 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 条附言    2015-05-04 16:15:46 +08:00
    @cylin
    @infinte
    @imn1
    谢谢各位, 问题解决
    一下子反应过来, 不是 windows 的问题, 是 dropbox 的问题!
    dropbox 也是够快, 瞬间就把文件名转了...
    5 条回复    2015-05-04 14:54:57 +08:00
    imn1
        1
    imn1  
       2015-05-04 13:37:56 +08:00
    unicode F900-FAFF 是 CJK Compatibility Ideographs
    主要是对一些零散的异体字(多出现在印刷)作修正用的

    你这个字串的来源有点问题,5973(4E00-9FCC)才是正式的汉字字符范围
    应该先处理来源字串,再应用到路径使用,路径不应使用\uxxxx这种写法
    GeQi
        2
    GeQi  
    OP
       2015-05-04 14:06:58 +08:00
    @imn1 谢回复
    \uF981是直接网站上抓下来的, 本身网站也不是国内的
    至于报错信息里 \uxxxx 的写法只是 python3 在 cmd 里无字符的unicode的表示法而已 路径是没问题的
    linux还没试, 不过 windows 隐式转换 unicode 字符真是头疼, 完全不理解这是什么逻辑
    imn1
        3
    imn1  
       2015-05-04 14:17:50 +08:00
    因为windows的文件系统是混合编码,具体的原理我搞不清,反正不止一种编码
    而字体又跟编码有关,一般字体(至少windows自带那些)并不支持unicode,如果unicode规定了一些字符只是印刷修正用,与正式范围的某个字是相同的话,出于显示需要自动修正也是可以理解的,不然字体不能识别就会显示成问号了,有些时候还会造成路径错误(因为windows路径限制使用的字符比较多)
    cylin
        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'
    >>>
    infinte
        5
    infinte  
       2015-05-04 14:54:57 +08:00
    @GeQi 我怀疑是 Python 内部做了某种 Unicode 规范化或者转码造成的(这个过程可能会把 U+F981 转换成 U+5973)。WIN32 api 的 -W 系可以明确使用任意的 UTF-16 列作为文件名。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5577 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 08:53 PVG 16:53 LAX 01:53 JFK 04:53
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86