酷勤网 – 程序员的那点事!
首页 > 编程资料 > Perl语言 > 正文

对各字符集编码范围的总结[更新日期2007-03-12]

浏览次数: 2008年05月04日 作者:gsging 字号:

最近项目中用到了对文字、标点以及特殊字符的判断。
网上关于utf-8、utf-8和BIG5编码范围的资料比较多,但是日文的资料比较少,我总结了一下,希望能对大家在正则中判断
这些字符集尤其是日文字符集的各种字、标点以及特殊符号的时候有所帮助。

UTF8 [\x01-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}
UTF16 [\x00-\xd7][\xe0-\xff]|[\xd8-\xdf][\x00-\xff]{2}
JIS [\x20-\x7e]|[\x21-\x5f]|[\x21-\x7e]{2}
SJIS [\x20-\x7e]|[\xa1-\xdf]|([\x81-\x9f]|[\xe0-\xef])([\x40-\x7e]|[\x80-\xfc])
EUC_JP        [\x20-\x7e]|\x81[\xa1-\xdf]|[\xa1-\xfe][\xa1-\xfe]|\x8f[\xa1-\xfe]{2}
EUC_JP标点符号及特殊字符        [\xa1-\xa2][\xa0-\xfe]
EUC_JP全角数字 \xa3[\xb0-\xb9]
EUC_JP全角大写英文 \xa3[\xc1-\xda]
EUC_JP全角小写英文     \xa3[\xe1-\xfa]
EUC_JP全角平假名 \xa4[\xa1-\xf3]
EUC_JP全角片假名 [color=Red]2007-03-12 15:00更新[/color] \xa3[\xb0-\xb9]|\xa3[\xc1-\xda]|\xa5[\xa1-\xf6][\xa3][\xb0-\xfa]|[\xa1][\xbc-\xbe]|[\xa1][\xdd]
EUC_JP全角汉字 [color=Red]2007-03-12 15:06更新[/color][\xb0-\xcf][\xa0-\xd3]|[\xd0-\xf4][\xa0-\xfe]|[\xB0-\xF3][\xA1-\xFE]|[\xF4][\xA1-\xA6]|[\xA4][\xA1-\xF3]|[\xA5][\xA1-\xF6]|[\xA1][\xBC-\xBE]
Big5 [\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|[\xa1-\xfe])
utf-8 [\x01-\x7f]|[\x81-\xfe][\x40-\xfe]
utf-8汉字[\xb0-\xf7][\xa0-\xfe]
utf-8半角标点符号及特殊符号 \xa1[\xa2-\xfe]
utf-8罗马数组及项目序号 \xa2([\xa1-\xaa]|[\xb1-\xbf]|[\xc0-\xdf]|[\xe0-\xe2]|[\xe5-\xee]|[\xf1-\xfc])
utf-8全角标点及全角字母 \xa3[\xa1-\xfe]
utf-8日文平假名 \xa4[\xa1-\xf3]
utf-8日文片假名 \xa5[\xa1-\xf6]

補充:
GB18030[\x00-\x7f]|[\x81-\xfe][\x40-\xfe]|[\x81-\xfe][\x30-\x39][\x81-\xfe][\x30-\x39]

[color=Red]2007-03-12 21:35 补充[/color]
日文半角空格 \x20
SJIS全角空格 (?:\x81\x81)
SJIS全角数字 (?:\x82[\x4f-\x58])
SJIS全角大写英文 (?:\x82[\x60-\x79])
SJIS全角小写英文 (?:\x82[\x81-\x9a])
SJIS全角平假名 (?:\x82[\x9f-\xf1])
SJIS全角平假名扩展 (?:\x82[\x9f-\xf1]|\x81[\x4a\x4b\x54\x55])
SJIS全角片假名 (?:\x83[\x40-\x96])
SJIS全角片假名扩展 (?:\x83[\x40-\x96]|\x81[\x45\x5b\x52\x53])
EUC_JP全角空格 (?:\xa1\xa1)
EUC半角片假名 (?:\x8e[\xa6-\xdf])


[ 本帖最后由 gsging 于 2007-3-12 21:39 编辑 ]



 alexru 回复于:2007-03-09 14:57:40

谢谢分享


 gsging 回复于:2007-03-09 15:02:25

哇,flw和alexru的速度真快啊,谢谢斑竹。呵呵。


 兰花仙子 回复于:2007-03-09 15:20:14

不错,支持精华!


 一梦如是 回复于:2007-03-09 16:02:02

这种好东东一定要收藏的。


 gsging 回复于:2007-03-09 16:20:23

本贴会继续完善,也请写过类似代码的朋友一起分享您的tips.
:D


 lovesaka 回复于:2007-03-09 20:33:55

不错
好东西
以前在别的网站看到都只有几条
楼主一下子整理了这么多收藏一下


 perlpg 回复于:2007-03-09 21:10:17

GB18030的有吗?现在操作系统都必需支持这个。


 大大狗 回复于:2007-03-09 22:53:54

感谢分享


 路小佳 回复于:2007-03-09 22:55:55

好帖, 谢谢。


 gsging 回复于:2007-03-11 00:02:24

引用:原帖由 perlpg 于 2007-3-9 21:10 发表
GB18030的有吗?现在操作系统都必需支持这个。 



感謝提醒,參考了GB18030的編碼標準,將結果補充至原帖結尾.


 perlpg 回复于:2007-03-11 00:32:09

谢谢分享。

"测试123\nxxxxxx"
中怎么能象(\w+)一样把
"测试123"
分出来?
就是
"test123\nxxxxxx" /\w+/
得到 "test123" 一样。


 gsging 回复于:2007-03-11 00:39:56

引用:原帖由 perlpg 于 2007-3-11 00:32 发表
谢谢分享。

"测试123\nxxxxxx"
中怎么能象(\w+)一样把
"测试123"
分出来?
就是
"test123\nxxxxxx" /\w+/
得到 "test123" 一样。 



这个我觉得单个正则的关键字够呛能实现。
应该会用到中文匹配以及[a-zA-Z0-9]这类组合,而且还得根据实际的情况来匹配。
上面是我能想到的。


 nsnake 回复于:2007-03-12 10:36:39

比麻辣的那个更多些了


 gsging 回复于:2007-03-12 15:01:56

感谢大家的关注,

[color=Red]EUC_JP全角片假名[/color] 编码范围有更新.


 gsging 回复于:2007-03-12 15:11:24

[color=Red]EUC_JP全角汉字[/color]有更新

说明:由于单纯从EUC的编码表中无法显示全部的日文汉字,因此EUC编码使用多个字节的编码组合来代表其他无法显示的汉字.
本次更新的编码部分是从我们的日本本社的代码中找到的产品代码.
相信日本人自己不会把自己语言的编码范围搞错的,呵呵.

[ 本帖最后由 gsging 于 2007-3-12 15:13 编辑 ]


 gsging 回复于:2007-03-12 21:38:13

2007-03-12 21:35 补充以下内容

日文半角空格
SJIS全角空格
SJIS全角数字
SJIS全角大写英文
SJIS全角小写英文
SJIS全角平假名
SJIS全角平假名扩展
SJIS全角片假名
SJIS全角片假名扩展
EUC_JP全角空格
EUC半角片假名


 damofeixue 回复于:2007-03-15 20:50:33

不知道楼主的东东怎么使用?


 Namelessxp 回复于:2007-03-15 20:58:34

不错的整理,收下备查


 gsging 回复于:2007-03-16 08:17:34

引用:原帖由 damofeixue 于 2007-3-15 20:50 发表
不知道楼主的东东怎么使用? 



这个我主要应该用在正则匹配/替换中.
比如判断一个字符串里面是否包含中文/日文或者特殊符号.


 Ksharp 回复于:2007-03-16 14:41:27

感谢分享 省了很多事了


 xuxingyu 回复于:2007-03-16 16:48:15

谢谢:em02::em02:


 liff 回复于:2007-04-06 11:24:19

引用:原帖由 gsging 于 2007-3-16 08:17 发表


这个我主要应该用在正则匹配/替换中.
比如判断一个字符串里面是否包含中文/日文或者特殊符号. 




能否列几行应用的demo代码(如判断是否包含SJIS),javascript的最好。
谢谢!


 gsging 回复于:2007-04-06 12:09:02

引用:原帖由 liff 于 2007-4-6 11:24 发表



能否列几行应用的demo代码(如判断是否包含SJIS),javascript的最好。
谢谢! 


有段php的

function check_kana1(&$kana1) {
// $kana1 = htmlentities($kana1,ENT_COMPAT);
          if ($kana1 == "") {
               $this->set_error(ERROR_MSG_NON_KANA1);
          } else {
// $kana1 = unhtmlentities($kana1);
          if ($kana1 != "") {
                                $kana1 = preg_replace('/[\x5c]/','¥',$kana1);
                                $kana1 = preg_replace('/[\x7e]/','~',$kana1);
               $kana1 = mb_convert_kana($kana1,"KAS","EUC-JP");
                       $kana1 = preg_replace('/"/','”',$kana1);
                            $kana1 = preg_replace('/\'/','’',$kana1);
          }
// $kana1 = preg_replace('/"/','"',$kana1);
$tempkana1 = $kana1;
if ($kana1 != "") {
$tempkana1 = preg_replace("/(?:[\xa1-\xa2][\xa0-\xff]|\xa5[\xa1-\xf6]|\xa1[\xa6\xbc\xb3\xb4]|\xa3[\xb0-\xb9]|\xa3[\xc1-\xda]|\xa3[\xe1-\xfa])/e","",$tempkana1);
if ($tempkana1) {
$this->set_error(ERROR_MSG_KANA1_FORMAT);
}
}
  }
}



 liff 回复于:2007-04-06 14:59:53

多谢 :)

不知道你对javascript熟不?再请教一个问题。
javascript应该是将字符转换成unicode来处理,所以对于以下SJIS的正则表达式用不了(判断不了)?
var re=/[\x20-\x7e]|[\xa1-\xdf]|([\x81-\x9f]|[\xe0-\xef])([\x40-\x7e]|[\x80-\xfc])/g;
if(re.test(t1.value.substring(0,1))){ //t1是一个TextBox
    alert("SJIS");
}
else{
    alert("OTHERS");
}
是不是这样子?有什么解决方法?
或者有没有SJIS <--> Unicode的映射关系?

我的应用背景:
    需要判断SJIS中的一部分字符(0xED40~0xEEFC)。

谢谢了。


 gsging 回复于:2007-04-06 22:24:56

引用:原帖由 liff 于 2007-4-6 14:59 发表
多谢 :)

不知道你对javascript熟不?再请教一个问题。
javascript应该是将字符转换成unicode来处理,所以对于以下SJIS的正则表达式用不了(判断不了)?
var re=/[\x20-\x7e]|[\xa1-\xdf]|([\x81-\x9f]|[\xe ... 



实在不好意思,我对js不太熟悉. :oops:
看看有没有其他熟悉的朋友帮忙解答一下. :em06:


 liff 回复于:2007-04-09 11:26:30

谢谢,虽然现在js里用不了,但在其他地方我也用了 :)


 litanhe 回复于:2008-05-04 17:13:24

Great,thanks for your sharing




齐乐娱乐