Journal(2005) | Blog(2006) | RandomLink | WhoAmI | LiveBookmark | HomePage

<<Previous: 如何将Perl代码着色  >>Next: 关于购买国外的虚拟主机

汉字编码笔记

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
编码第一字节第二字节第三字节第四字节
GB23120xB0-0xF70xA0-0xFE
GBK0x81-0xFE0x40-0xFE
GB18030的双字节0x81-0xFE0x40-0x7E, 0x80-0xFE
GB18030的四字节0x81-0xFE0x30-0x390x81-0xFE0x30-0x39
一般来说,需要支持的是GBK,而GB18030的双字节与GBK仅差一条线,XX7F。所以一般的汉字匹配为
$chinese =~ /^[\x8140-\xFEFE]+$/;
这里所匹配的不是全是汉字,还包括非汉字符号,还有用户自定义字符区。
这东西真不是一般麻烦。

常见的两个空白字的过滤

一个字“ ”是中文简体输入法在全角格式下的空格,编码为a1a1。
另一个字“”不知道怎么输入的?可能是繁体输入法的,编码为aba7。
其实还有一大段区域属于用户自定义区域,此区域内的字在网页上显示都为占两字节的空格。一般用户名的注册是需要过滤这些空格的。这范围我还没找到。
$text =~ s/ //g;
$text =~ s///g;
#或者使用如下的过滤
$text =~ s/(\xa1\xa1)|(\xab\xa7)//g;

<<Previous: 如何将Perl代码着色  >>Next: 关于购买国外的虚拟主机

Options: +Del.icio.us

Related items Created on 2004-11-23 13:23:11, Last modified on 2005-05-21 00:17:12
Copyright 2004-2005 All Rights Reserved. Powered by Eplanet && Catalyst 5.62.