Category: Miscellaneous Keywords: 汉字 编码 匹配
坦白说,以下的东西我不是很懂。只是在做实验。这份就类似于实验纪录。ord,unpack("*H",hex,chr
my $c = "我";
print unpack("H*",$c); # 输出 ced2, 此为汉字编码\xcede
print ord("$c")"; # 输出 206
print hex(substr(unpack("H*",$c),0,2)); # 输出 206, hex("ce") = 206
print chr(0xce),chr(0xd2); # 输出“我”,chr(0xced2)输出的字为“旎”。原因不可考。
汉字编码范围
参考文章:http://www.douzi.org/weblog/archives/2004_03.html| 编码 | 第一字节 | 第二字节 | 第三字节 | 第四字节 |
|---|---|---|---|---|
| GB2312 | 0xB0-0xF7 | 0xA0-0xFE | ||
| GBK | 0x81-0xFE | 0x40-0xFE | ||
| GB18030的双字节 | 0x81-0xFE | 0x40-0x7E, 0x80-0xFE | ||
| GB18030的四字节 | 0x81-0xFE | 0x30-0x39 | 0x81-0xFE | 0x30-0x39 |
$chinese =~ /^[\x8140-\xFEFE]+$/;这里所匹配的不是全是汉字,还包括非汉字符号,还有用户自定义字符区。
这东西真不是一般麻烦。
常见的两个空白字的过滤
一个字“ ”是中文简体输入法在全角格式下的空格,编码为a1a1。另一个字“”不知道怎么输入的?可能是繁体输入法的,编码为aba7。
其实还有一大段区域属于用户自定义区域,此区域内的字在网页上显示都为占两字节的空格。一般用户名的注册是需要过滤这些空格的。这范围我还没找到。
$text =~ s/ //g; $text =~ s///g; #或者使用如下的过滤 $text =~ s/(\xa1\xa1)|(\xab\xa7)//g;