- 论坛徽章:
- 12
|
本帖最后由 523066680 于 2017-12-25 17:37 编辑
回复 1# yakczh_cu
open FH, '<:encoding(GBK)', $in_file;
这句等于按 GBK 解码成 UNICODE (国际统一编码),
所以 ord($char) 得到的是统一码,要显示 gbk 码,需要再 encode 一次
- use Encode;
- my $in_file="e5ad.txt";
- open FH, '<:encoding(GBK)', $in_file;
- my ( $char_uni, $char_gbk );
- while ( read(FH, $char_uni, 1) )
- {
- $char_gbk = encode('gbk', $char_uni);
- printf "%s -> ", $char_gbk;
- # 因为汉字GBK编码分为两个字节,所以要分别 ord 取值
- grep { printf "%x", ord($_) } split(//, $char_gbk);
- printf "\n";
- }
- close FH;
复制代码
- grep { printf "%x", ord($_) } split(//, $char_gbk);
复制代码
这句也可以改为
- $char_gbk =~s/(.)/printf "%x", ord($1)/ge;
复制代码
|
|