标签:
在perl语言中,字符串只有两种形式:
(1)字节流字符串:不管字符串是何种内容、何种编码,都解析为单字节的字节串。
(2)字符流字符串:按照UTF8编码方案,从左到右把字节流解析为连续的字符流。
perl如何确定一个字符串是字节流字符串还是采用UTF8编码的字符流字符串呢?
在Perl内部,每个字符串都有一个UTF8编码标志,这个标志有两个状态:on或者off。如果标志为on,就是字符流字符串,反之就是字节流字符串。默认情况下,perl语言字符串的编码标识都是off状态,即字符串都是以字节流字符串类型进行操作的。
要开启和关闭字符串的UTF8编码标志,可以采用Encode模块的函数_utf8_on()和_utf8_off()来实现。
如果一个变量的内容是从文件读入的,并且这个文件是UTF8编码的,则包含UTF8编码字符的字符串默认为字节流字符串。如果需要转换为字符流字符串,也需要用Encode::_utf8_on()开启UTF8字符流处理的标识。
文件input.txt以utf8编码:
use Encode; use utf8;#使源代码中包含汉字的字符串常量统一编程字符流字符串形式 open(In,'input.txt'); while($line=<In>){ chomp($line); Encode::_utf8_on($line); if($line=~/^[你,我,他]/){ print encode("gb2312",$line)."\n"; } } close(In);输出结果:
注意:源代码本身也是UTF8编码格式,正则表达式中包含的汉字就是UTF8编码的,如果让这些汉字当做字符流常量来处理,必须在头部加入"use utf8"说明,这个说明会使源代码中出现的包含汉字的字符串常量统一变成字符流字符串形式。
标签:
原文地址:http://blog.csdn.net/qiqiaiairen/article/details/51344268