免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2692 | 回复: 3
打印 上一主题 下一主题

【自己解决,写出来供新人参考】关于文件测试的一个陷阱——编码问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-24 20:12 |只看该作者 |倒序浏览
缘由:
想筛选一个文件夹里包含的目录。

文件夹里的文件是这样的


用 grep -d之后,只能反馈出. .. 123 456到屏幕,汉字的文件夹被漏掉了。

代码是这样的
  1. #! perl -w
  2. #编码解码路径名称示例.pl

  3. use 5.012;
  4. use utf8;
  5. use autodie;
  6. use Encode; #文件名编码用
  7. use open ":encoding(gbk)", ":std"; #其它编码用

  8. opendir my $current_dh, './';
  9. my @file_names = readdir $current_dh;
  10. closedir $current_dh;
  11. my @dir_names = map {encode('gbk' ,$_)} @file_names;
  12. @dir_names = grep -d, @dir_names;
  13. say “@dir_names”;

  14. <>;
复制代码

当时想的是,-d是不是出什么问题了,要不就是grep又淘气了。

左思右想,-d,用来判断文件是不是目录,是的话返回真,不是返回假。其实,这还有第三种情况,被我忽略了——如果文件不存呢

这么一想恍然大悟,-d没有返回哪两个汉字文件夹,倒不是说他们不是目录,返回假,而是压根就没找到!!!

也就是流程是这样的:grep把@dir_names里的元素依次提取出来,不是直接判断是否目录,而是把它代入win文件系统里,实地对照之后再判断;比如说碰到‘一二三’时,这些字符已经encode过了,变成了utf8编码,而win里面的‘一二三’还是ANIS编码,自然是找不到这个名称了!

所以说,要么先筛选再encode,要么筛选之前decode一下再放出去。

总结就是,系统什么时候默认unicode编码啊。。。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
2 [报告]
发表于 2015-07-25 12:47 |只看该作者
Unicode 编码也会有一样的问题吧,国家制定了 GBK 编码,台湾有 BIG5,国际学术组织制定了 UTF8. UNICODE, 除非统一中国,程序员当上主席。

论坛徽章:
0
3 [报告]
发表于 2015-07-26 16:21 |只看该作者
我还以为unicode和utf8兼容呢,回复 2# 104359176


   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2015-07-26 16:33 |只看该作者
回复 3# 死水站


    UTF-8 只是 Unicode 可以采用的一种编码方式。Unicode 还包含一个字符集,字符属性,等等,同时也可以采用多种编码方式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP