免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2817 | 回复: 9

perl中文化文件名 [复制链接]

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
发表于 2015-01-09 10:15 |显示全部楼层
5可用积分
本帖最后由 huang6894 于 2015-01-09 10:15 编辑

想问一下,我的linux环境是非中文环境,可是我必须输出一个中文名的中间文件,直接open OUT,"> 中文.txt“;得到的是一个乱码的txt(里面的字符是正常的,因为用了binmode(STDOUT, ":encoding(gb2312)");),请问应该如何设置,能够在不修改父进程的前提下生产的中文文件名不乱码呢?

最佳答案

查看完整内容

回复 7# huang6894 那先做判断,首先你能用其他命令生成一个中文名的文件吗?比如 ps > abc中文.txt确保现在ls 能查看到这个中文名的文件然后在同目录下执行下面的Perl,把结果贴上来

论坛徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
发表于 2015-01-09 10:15 |显示全部楼层
本帖最后由 523066680 于 2015-01-10 22:27 编辑

回复 7# huang6894


    那先做判断,首先你能用其他命令生成一个中文名的文件吗?
比如 ps > abc中文.txt

确保现在ls 能查看到这个中文名的文件

然后在同目录下执行下面的Perl,把结果贴上来
  1. use Encode;

  2. my ($fname)=glob "abc*.txt" or die "File not exists? ";

  3. my $perlchar="中文";

  4. print xcode($fname);
  5. print "\n";
  6. print xcode($perlchar);

  7. sub xcode {
  8.         $_[1]='x' if (not defined $_[1]);
  9.         for my $v ( split(//,$_[0]) ) {
  10.                 print sprintf ("%l$_[1] ",ord($v));       
  11.         }
  12.         print "\n\n";
  13. }
复制代码

论坛徽章:
7
巳蛇
日期:2013-11-28 09:22:59天秤座
日期:2014-10-25 15:40:452015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之德黑兰石油
日期:2015-07-15 08:46:452015亚冠之平阳省
日期:2015-11-08 16:27:53白银圣斗士
日期:2015-11-14 09:58:12
发表于 2015-01-09 21:01 |显示全部楼层
用utf8编码文件内容试试

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
发表于 2015-01-09 22:58 |显示全部楼层
回复 2# b114213903


    报告,内容是中文的。我的脚本处理的时候用encode写进了这个中文的文件里面,可是由于我的linux环境是英文的$ENV{LANG}=en_GB.ISO-8859-1;
   所以我在皮尔洛中把这个文件打包好后下下来一看,文件名是乱码的,内容却是正确的~

论坛徽章:
7
巳蛇
日期:2013-11-28 09:22:59天秤座
日期:2014-10-25 15:40:452015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之德黑兰石油
日期:2015-07-15 08:46:452015亚冠之平阳省
日期:2015-11-08 16:27:53白银圣斗士
日期:2015-11-14 09:58:12
发表于 2015-01-10 00:47 |显示全部楼层
文件名乱码没遇到过,用CentOS6.4,系统默认英文,utf8编码,添加了系统对东亚编码的支持以后,中文文件名都没问题

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
发表于 2015-01-10 13:39 |显示全部楼层
回复 4# b114213903


    我知道,如果设置了bashrc让lang为utf-8的话是没问题的~

论坛徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
发表于 2015-01-10 15:07 |显示全部楼层
你要确定这个perl脚本是以什么格式保存的,在编辑器应该可以查到。
比如你是用utf8格式保存的perl脚本

那么明文的 "中文" 就是 utf8格式的,如果系统中的文件名应该为gbk格式,
那就这么弄

use Encode;
open WRT,">", encode('gbk', decode('utf8', "中文.txt"));

或者
use Encode;
use utf8;
open WRT,">", encode('gbk', "中文.txt");

你可以把你的乱码文件名粘贴上来,我们帮你看看

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
发表于 2015-01-10 16:34 |显示全部楼层
回复 6# 523066680


    谢谢回复,还是不行~
QQ截图20150110163406.jpg

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
发表于 2015-01-11 10:02 |显示全部楼层
回复 2# 523066680


    实在抱歉,在终端我是没法创建中文文件的,所以以前用bash的时候我都是直接export LANG=utf-8的,可是在perl中由于进程的原因,system的export是不起作用的,我本以为既然我能在不定义系统环境的前提下往一个文件里写进中文,那么也应该可以创建中文文件。。。现在看来只能通过修改linux环境了~

论坛徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
发表于 2015-01-11 18:23 |显示全部楼层
本帖最后由 523066680 于 2015-01-11 18:26 编辑

回复 9# huang6894

    意思是没办法从其他方式生成中文名称的文件?

我上面是做一个测试,如果你能用其他方式生成,那么我用Perl去读取该文件名,就可以分析它是什么编码的

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP