GB2312和GBK的unicode范围

csdnbuku 2015-11-14 04:46:24
如题。原来的问题是:
http://bbs.csdn.net/topics/391858288

我的目的就是想从文本中提取出含有GB或GBK的行。如果用现成的GB表、GBK表处理效率很低,
想要通过正则处理,需要知道其unicode范围 。网上找了个[\u4e00-\u9fa5]好像是GBK的,但是测试后发现并不全。
所以来请教大家了,谢谢了!



...全文
587 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-11-23
  • 打赏
  • 举报
回复
先下载安装Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt 再参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\cvt\*.*: C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\cvt>dir /a-d /w 驱动器 C 中的卷是 C_HD5_1 卷的序列号是 1817-D526 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\cvt 的目录 8859_1 8859_10 8859_13 8859_14 8859_15 8859_16 8859_2 8859_3 8859_4 8859_5 8859_6 8859_7 8859_8 8859_9 baltic big5 cp037 cp1006 cp1026 cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp424 cp437 cp500 cp737 cp775 cp850 cp852 cp855 cp856 cp857 cp860 cp861 cp862 cp863 cp864 cp865 cp866 cp869 cp874 cp875 cp932 cp936 cp949 cp950 cyrillic ebcdic euc euc_0208 gb12345 gb2312 greek iceland jis jis0201 jis_0208 ksc5601 latin2 one_one roman sjis sjis_0208 turkish utf16 utf8 utf8_utf16 wbuffer wstring xjis xone_byte xtest xtwo_byte 79 个文件 4,638,592 字节
csdnbuku 2015-11-22
  • 打赏
  • 举报
回复
引用 9 楼 fefe82 的回复:
你的输入是什么编码的? 你的 GB 表,GBK 表是什么编码的?或者说是什么样子的?
下载地址: http://pan.baidu.com/s/1jGhLbM2 image文件夹下就有GB表和GBK表。
fefe82 2015-11-20
  • 打赏
  • 举报
回复
你的输入是什么编码的? 你的 GB 表,GBK 表是什么编码的?或者说是什么样子的?
csdnbuku 2015-11-20
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
//GBK汉字内码范围(不包括A1xx~A9xx的标点符号英文字母特殊符号等) //区码 ,位码 //81-A0 ,40-7E 80-FE //AA-AF ,40-7E 80-A0 //B0-D6 ,40-7E 80-FE //D7 ,40-7E 80-F9 //D8-F7 ,40-7E 80-FE //F8-FE ,40-7E 80-A0
区码,位码,还只是GBK的。我都弄晕了。我觉得我走了弯路,就原问题而言,什么方法才是最有效率的呢? 比如用现成的GB表、GBK表,我觉得更准确些,但是我要遍历每行每个字来判断,效率却是低了些,有什么好方法?
赵4老师 2015-11-16
  • 打赏
  • 举报
回复
//GBK汉字内码范围(不包括A1xx~A9xx的标点符号英文字母特殊符号等) //区码 ,位码 //81-A0 ,40-7E 80-FE //AA-AF ,40-7E 80-A0 //B0-D6 ,40-7E 80-FE //D7 ,40-7E 80-F9 //D8-F7 ,40-7E 80-FE //F8-FE ,40-7E 80-A0
csdnbuku 2015-11-15
  • 打赏
  • 举报
回复
引用 1 楼 fefe82 的回复:
如果你想表达的是想找出含有汉字的行的话,请参考 http://www.unicode.org/charts/

4E00 - 9FD5 CJK Unified Ideographs (Han) (这是你列的那个区间)
3400 - 4DB5 CJK Extension-A
20000-2A6D6 CJK Extension B
2A700-2B734 CJK Extension C
2B740-2B81D CJK Extension D
2B820-2CEA1 CJK Extension E

F900 -FAD9 CJK Compatibility Ideographs
2F800-2FA1D CJK Compatibility Ideographs Supplement

一般前两个,或者再加上 CJK Compatibility 就差不多了。


不对。我那个区间测试过根本不全,它不包含以下GBK汉字:

我要的是GB和GBK的精准的区间范围 ,CJK太大就算了。

我的目的是:
读取文本,如果每行中包含GB汉字,则该行就提取出来。(不含,则该行归入GBK)
同理,如果每行中包含GBK汉字,则该行就提取出来(不含,则该行归入GBK以外)
我有现成的GB表和GBK表,但是要遍历文本每一行每一个字,非常耗时,10万文本都要2分钟。不知道有没有什么好方法。



csdnbuku 2015-11-15
  • 打赏
  • 举报
回复
引用 3 楼 fefe82 的回复:
这些在 Unicode 里都不一定是一个区间,而可能是一些离散的点。特别是 GB 。 既然你已经有表了,那把所有的码位拍一下序不就有区间了? 排序之后,有更快的查找方式,比如二分,不需要遍历。 还可以用哈希表或者 bitmap 实现(接近)常数时间的查找。
我不知道怎么查看它的码位,也不知道怎么排序。
引用 4 楼 DelphiGuy 的回复:
首先,GBK的范围要比unicode CJK部分更大。 编码范围: GB有好几个版本,GB2312、GB13000、 GB18030,编码范围不一样的,如果是最基本的GB2312-80,那么编码范围高字节A1~FE(其中汉字部分A1~F7)、低字节A1~FE。 GBK的编码范围高字节81~FE、低字节40~FE,去掉其中编码**7F的126个。
不知道怎么用字节判断,正则好像用不了。
  • 打赏
  • 举报
回复
首先,GBK的范围要比unicode CJK部分更大。 编码范围: GB有好几个版本,GB2312、GB13000、 GB18030,编码范围不一样的,如果是最基本的GB2312-80,那么编码范围高字节A1~FE(其中汉字部分A1~F7)、低字节A1~FE。 GBK的编码范围高字节81~FE、低字节40~FE,去掉其中编码**7F的126个。
fefe82 2015-11-15
  • 打赏
  • 举报
回复
这些在 Unicode 里都不一定是一个区间,而可能是一些离散的点。特别是 GB 。 既然你已经有表了,那把所有的码位拍一下序不就有区间了? 排序之后,有更快的查找方式,比如二分,不需要遍历。 还可以用哈希表或者 bitmap 实现(接近)常数时间的查找。
  • 打赏
  • 举报
回复
文件每行读到一个buffer里,逐字节判断就可以了。
fefe82 2015-11-14
  • 打赏
  • 举报
回复
如果你想表达的是想找出含有汉字的行的话,请参考 http://www.unicode.org/charts/ 4E00 - 9FD5 CJK Unified Ideographs (Han) (这是你列的那个区间) 3400 - 4DB5 CJK Extension-A 20000-2A6D6 CJK Extension B 2A700-2B734 CJK Extension C 2B740-2B81D CJK Extension D 2B820-2CEA1 CJK Extension E F900 -FAD9 CJK Compatibility Ideographs 2F800-2FA1D CJK Compatibility Ideographs Supplement 一般前两个,或者再加上 CJK Compatibility 就差不多了。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧