- 论坛徽章:
- 0
|
本帖最后由 yakczh 于 2011-02-19 16:23 编辑
use encoding "xxx" 可以解决页面编码的问题
use open ":encoding(xxx)"; 可以解决从外部文件io的编码问题
但是命令参数 $ARGV 不加上面任一个encoding正常,一旦加上了以后就有问题了
比如 终端是utf8环境,读gbk文件,程序用utf8编码保存
- use encoding "utf8";#,STDIN => "utf8",STDOUT => "utf8";
- use open ':std';
- use open IO => ":encoding(gbk)";
- sub getbytes{
- my @bytes=unpack("C*",shift);
- map {$_=sprintf("%4x",$_)} @bytes;
- return join "\t",@bytes;
-
- }
- sub debug {
- my $str=shift;
- print "\n string:", $str;
- print "\n bytes :",getbytes($str);
-
- }
- $stdin= $ARGV[0];
- print "\n ---------- stdin-----------\n";
- debug($stdin);
- $inline="中文abc";
- print "\n --------- page encode ------\n";
- debug($inline);
- my $filename="gbk.txt";
- my $text='';
- open FH,$filename;
- do {local $/,$text=<FH>;};
- close FH;
- print "\n ---------- io --------------\n";
- debug($text);
复制代码 运行 perl test.pl 中文
或者在gbk环境下读utf8文件,文件用gbk编码保存
- use encoding "gbk";#,STDIN => "utf8",STDOUT => "utf8";
- use open ':std';
- use open IO => ":encoding(utf8)";
- sub getbytes{
- my @bytes=unpack("C*",shift);
- map {$_=sprintf("%4x",$_)} @bytes;
- return join "\t",@bytes;
-
- }
- sub debug {
- my $str=shift;
- print "\n string:", $str;
- print "\n bytes :",getbytes($str);
-
- }
- $stdin= $ARGV[0];
- print "\n ---------- stdin-----------\n";
- debug($stdin);
- $inline="中文abc";
- print "\n --------- page encode ------\n";
- debug($inline);
- my $filename="u8.txt";
- my $text='';
- open FH,$filename;
- do {local $/,$text=<FH>;};
- close FH;
- print "\n ---------- io --------------\n";
- debug($text);
复制代码 运行 perl test.pl 中文
内部编码和外部io都没有问题,但是命令参数编码始终不对 |
|