神奇的Perl-第六个任务(6)

本文介绍了一个Perl程序的设计,用于在Windows和Linux系统间兼容UTF8和GBK编码,并演示了如何根据系统默认编码调整字符串处理方式。

本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载

WINDOWS控制台中正常运行需要将utf8编码转换成GBK编码,因此单独编写WINDOWS下运行的程序perl4-18-win.pl

#!c:/perl/bin/perl

#!/usr/bin/perl

#perl4-18-win.pl

# perl4_18_zh为笔者定义的一个模块,导出了一个函数utf2gbk,将UTF8转换为GBK编码

use perl4_18_zh;

my @names;

push (@names,&utf2gbk("李明"));

push (@names,&utf2gbk("李永"));

push (@names,&utf2gbk("黄珏"));

push (@names,&utf2gbk("刘上新"));

#找出所有李姓人名

foreach  $name(@names){

        $xing=&utf2gbk("");

   print "$name " if ($name=~m/^$xing/);

}

我们编写一个能兼容中文windowslinux字符编码的程序Perl4-18.pl来完成perl4-18-win.plperl4-18-linux.pl的功能,部分核心代码如下:

 

1)判断当前语言环境并放入$bm,UTF8->0,GBK->1

 

下面,我们编写一个能兼容中文windows和linux系统默认字符编码的程序来完成perl4-18-win.pl和perl4-18-linux.pl的功能。

如何获得当前系统默认编码是否为UTF8呢,我们通过取LANG环境的值来判断。比如:

if (defined($ENV{"LANG"})) {

if  ($ENV{"LANG"}=~m/utf(-*)8/i)#UTF8->1,GBK->0

  {$bm=1;}

else 

  {$bm=0;}

}

else

{$bm=0;}

以上代码中,如果当前系统编码是UTF8,$bm为0,否则$bm为1。该程序只在linux和中文windows系统运行,中文windows系统编码一般为GBK,因此当$bm为1时,当前系统编码为GBK。

2)增加人名

 

       push (@names,$bm?&utf2gbk("李明"):"李明");

 

.........

.................

3) 找出所有李姓人名

      my $xing=($bm?&utf2gbk(""):"");

     print "$name " if ($name=~m/^$xing/);

 

 最后我们把模块perl4_18_zh修改一下,让它能更好地完成任务。

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值