博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提取所有汉字
阅读量:5062 次
发布时间:2019-06-12

本文共 2466 字,大约阅读时间需要 8 分钟。

提取至Unicode 6.0,2012年为止的所有CJK汉字(合计75617个)

public partial class MainWindow : Window    {        public MainWindow()        {            StringBuilder sbAllHans = new StringBuilder(124000);            InitializeComponent();            //0x3400 - 0x4DB5       // 统一汉字扩展区A,6582字            CreateData(sbAllHans, 0x3400, 0x4DB5, "A");            //0x4E00 - 0x9FCC       // 统一汉字基本集,20941字            CreateData(sbAllHans, 0x4E00, 0x9FCC, "M");            //0xF900 - 0xFA2D       // 兼容汉字(1),302字            CreateData(sbAllHans, 0xF900, 0xFA2D, "1");            //0xFA30 - 0xFA6D       // 兼容汉字(2),62字            CreateData(sbAllHans, 0xFA30, 0xFA6D, "2");            //0xFA70 - 0xFAD9       // 兼容汉字(3),106字            CreateData(sbAllHans, 0xFA70, 0xFAD9, "3");            //0x20000 - 0x2A6D6     // 统一汉字扩展区B,42711字            CreateData(sbAllHans, 0x20000, 0x2A6D6, "B");            //0x2A700 - 0x2B734     // 统一汉字扩展区C,4149字            CreateData(sbAllHans, 0x2A700, 0x2B734, "C");            //0x2B740 - 0x2B81D     // 统一汉字扩展区D,222字            CreateData(sbAllHans, 0x2B740, 0x2B81D, "D");            //0x2F800 - 0x2FA1D;    // 兼容汉字(4),542字            CreateData(sbAllHans, 0x2F800, 0x2FA1D, "4");            File.WriteAllText("D:\\AllHans.txt", sbAllHans.ToString());        }        private void CreateData(StringBuilder sbAllHans, int from, int to, string type)        {            for (int i = from; i <= to; i++)            {                char[] chars = IntToUtf16(i);                foreach (var one in chars) sbAllHans.Append(one);            }        }        public static char[] IntToUtf16(int value)        {            if (value < 0 || value > 0x10FFFF) throw new ArgumentOutOfRangeException("unicodeValue");            if (value <= char.MaxValue) return new char[] { (char)value };            int vx = value - 0x10000;            int vHight = vx >> 10;            //int vLow = vx << 21 >> 21;      //最高位为正负标识为,总是0,如果直接<<22,则会把标识位变成1,从而导致数值变为负数,出错。            int vLow = vx & 0x03FF;            int vLow1 = vx << 21 >> 21;            int w1 = 0xD800;            int w2 = 0xDC00;            w1 |= vHight;            w2 |= vLow;            return new char[] { (char)w1, (char)w2 };        }    }

注意:

1.这些汉字虽然能够全部提取,但是绝大多数的字库是没有全部字体的字形显示的,所以需要安装字库;具体信息请参见的说明()

2.有大量的汉字是用两个char组成的(所谓高代理项和低代理项,与DBCS编码原理类似),所以要处理全部的汉字,需要进行代理项对的判断。

3.汉字中有一部分是日、韩、越专用汉字。

4.兼容汉字为相同的汉字但字形有区别的字,用于保留字形,一般使用时会转换为标准字形的汉字。

 

转载于:https://www.cnblogs.com/yuxs/archive/2012/12/25/2832255.html

你可能感兴趣的文章
控制文件的备份与恢复
查看>>
返回代码hdu 2054 A==B?
查看>>
PHP的SQL注入技术实现以及预防措施
查看>>
软件目录结构规范
查看>>
mysqladmin
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
HEVC播放器出炉,迅雷看看支持H.265
查看>>
[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
查看>>
Eclipse 调试的时候Tomcat报错启动不了
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android入门之文件系统操作(二)文件操作相关指令
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
java学习笔记之String类
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
jdk从1.8降到jdk1.7失败
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
【知识库】-数据库_MySQL 的七种 join
查看>>
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>