- 论坛徽章:
- 0
|
缘由:
想筛选一个文件夹里包含的目录。
文件夹里的文件是这样的
用 grep -d之后,只能反馈出. .. 123 456到屏幕,汉字的文件夹被漏掉了。
代码是这样的
- #! perl -w
- #编码解码路径名称示例.pl
- use 5.012;
- use utf8;
- use autodie;
- use Encode; #文件名编码用
- use open ":encoding(gbk)", ":std"; #其它编码用
- opendir my $current_dh, './';
- my @file_names = readdir $current_dh;
- closedir $current_dh;
- my @dir_names = map {encode('gbk' ,$_)} @file_names;
- @dir_names = grep -d, @dir_names;
- say “@dir_names”;
- <>;
复制代码
当时想的是,-d是不是出什么问题了,要不就是grep又淘气了。
左思右想,-d,用来判断文件是不是目录,是的话返回真,不是返回假。其实,这还有第三种情况,被我忽略了——如果文件不存呢?
这么一想恍然大悟,-d没有返回哪两个汉字文件夹,倒不是说他们不是目录,返回假,而是压根就没找到!!!
也就是流程是这样的:grep把@dir_names里的元素依次提取出来,不是直接判断是否目录,而是把它代入win文件系统里,实地对照之后再判断;比如说碰到‘一二三’时,这些字符已经encode过了,变成了utf8编码,而win里面的‘一二三’还是ANIS编码,自然是找不到这个名称了!
所以说,要么先筛选再encode,要么筛选之前decode一下再放出去。
总结就是,系统什么时候默认unicode编码啊。。。
|
|