开始之前先讲一下汉字编码到底是个啥?
汉字编码就是汉字对应于计算机中的编码存储,主要有以下几种常见的汉字字符集编码:
GB2312编码:1981年5月1日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。
BIG5编码:台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。
GBK编码:1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
GB18030编码:2000年3月17日发布的汉字编码国家标准,是对GBK编码的扩充,覆盖中文、日文、朝鲜语和中国少数民族文字,其中收录27484个汉字。GB18030字符集采用单字节、双字节和四字节三种方式对字符编码。兼容GBK和GB2312字符集。
Unicode编码:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。
今天主要写一个汉字与编码之间转换的工具软件针对于GB2312汉字编码,如下图所示
1.汉字——》编码
汉字转换成编码,需要将汉字先转换成UTF-8编码,再转换为标准的GB2312的汉字编码
代码如下
String str = textBox1.Text;//获取文本框中的汉字内容
Encoding FromEncoding = Encoding.GetEncoding("UTF-8");//设置需要转换的编码方式
Encoding ToEncoding = Encoding.GetEncoding("gb2312")//设置需要转换的编码方式
byte[] FromBytes = FromEncoding.GetBytes(str);//将汉字内容转换为UTF-8形式
byte[] Tobytes = Encoding.Convert(FromEncoding, ToEncoding, FromBytes);//进行UTF-8编码到GB2312的编码
foreach (byte mybyte in Tobytes)//遍历整个编码数组
{
string str1 = mybyte.ToString("x").ToUpper();//十进制的数转换为十六进制的字符并大写
textBox2.Text += "0x" + (str1.Length == 1 ? "0" + str1 : str1) + " ";//标准化显示
}
2.编码——》汉字
从编码再转换成汉字内容,相当于反过来进行操作,先去除标准化的形式显示,只保留具体的编码,然后从GB2312转换为UTF-8的编码,再编码进行解析为汉字内容
代码如下
byte[] FromBytes = new byte[textBox1.Text.Length / 2];//用于保存汉字编码内容
try
{
string Buffer = textBox1.Text;//获取文本框中的汉字编码内容
Buffer = Buffer.Replace("0x", "");//使用null来代替0x,去除格式
Buffer = Buffer.Replace(" ", string.Empty);//去除空格
for (int i = 0; i < Buffer.Length / 2; i++)//进行截取每个编码的两位
{
FromBytes[i] = Convert.ToByte(Buffer.Substring(i * 2, 2), 16);//转化为比特形式
}
Encoding FromEncoding = Encoding.GetEncoding("gb2312");//设置需要转换的编码方式
Encoding ToEncoding = Encoding.GetEncoding("UTF-8");//设置需要转换的编码方式
byte[] Tobytes = Encoding.Convert(FromEncoding, ToEncoding, FromBytes);//进行GB2312编码到UTF-8的编码
string mystr = ToEncoding.GetString(Tobytes);//转换为汉字内容
textBox2.Text = mystr;//进行显示
}
catch
{
MessageBox.Show("数据转换错误,请输入数字.", "错误");
}
下面附一下,工程下载地址
后续有时间的话把其他编码方式也添加上去,后续再修改本文。。。