科技讯息网 – 程序员的那点事!

首页 > 编程资料 > Perl语言 > 正文

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

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

最近项目中用到了对文字、标点以及特殊字符的判断。
网上关于GBK、GB2312和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])

GBK
[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]

GB2312汉字
[\xb0-\xf7][\xa0-\xfe]

GB2312半角标点符号及特殊符号
\xa1[\xa2-\xfe]

GB2312罗马数组及项目序号
\xa2([\xa1-\xaa]|[\xb1-\xbf]|[\xc0-\xdf]|[\xe0-\xe2]|[\xe5-\xee]|[\xf1-\xfc])

GB2312全角标点及全角字母
\xa3[\xa1-\xfe]

GB2312日文平假名
\xa4[\xa1-\xf3]

GB2312日文片假名
\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