zoukankan      html  css  js  c++  java
  • 【C#Winforms】汉字编码<>汉字,汉字区位码<>汉字,ASCII码 Charles

    【汉字编码】算法:
          1,获取Encoding对象(参数:编码-gb2312)
          2,通过该对象,获取字节数组
          3,将第一个字节左移位(<<8),并强制转换为int
          4,将的得到的数据与强制转换后的第二个字节相加
    可以用相反的方法从【汉字编码】还原到【汉字】

    【汉字区位码】算法:
           1,获取自己数组(同上)
           2,将第一个字节强制转换后-160 转换成 字符串
           3,将第二个字节强制转换后-160 转换成字符串
           4,将2,3得到的字符串相加,即得到区位码
    使用相反的方法从【汉字区位码】 还原到 【汉字】

    附:【键盘符号ASCII编码】算法
           1,获取unicode编码的字节数组的第1个字节即可(byte[0]);

    下面是汉字区位码的获取程序:
    (汉字区位码,就是日常我们考试时需要填写的名字对应的那一段数字)
    (对应算法看程序更容易理解)
      
    private void btn_Get_Code_Click(object sender, EventArgs e)
            {
                string s_chinese = this.txb_chinese.Text;
                byte[] code = Encoding.Default.GetBytes(s_chinese);
                short front = (short)(code[0] - '\0'); //这里(short)code[0]也是可以的
                short back = (short)(code[1] - '\0');
                string codes = (front - 160).ToString() + (back - 160).ToString();
                this.txb_code.Text = codes;
            }
    以上程序来自明日开发实例1200例中的一段代码,下面的代码通过反向推导实现区位码到汉字的转换:

            private void btn_retchinese_Click(object sender, EventArgs e)
            {
                int P_chicode = int.Parse(this.txb_code.Text);
                int front = P_chicode / 100;
                int back = P_chicode % 100;
                front += 160;
                back += 160;
                byte[] mbyte = new byte[2] {(byte)front, (byte)back };
                string chinese = Encoding.Default.GetString(mbyte);
                this.txb_rchinese.Text = chinese;
            }

            相比之下,java似乎更简洁一点:String chinese=new String(mbyte,"GB2312");这样就获取到了 区位码 对应的 汉字。

  • 相关阅读:
    geth搭建以太坊私链及常用操作
    什么是区块链?
    linux的命令
    MySQL的sql优化
    如何防止秒杀抢购超卖?
    try catch影响Spring事务吗?
    mysql中InnoDB与MyISAM的区别
    进程和线程的区别
    Nginx采用yum安装方式及安装后的目录
    Springboot2.0中jpa默认创建的mysql表为myisam引擎问题
  • 原文地址:https://www.cnblogs.com/shenchaoming/p/2264553.html
Copyright © 2011-2022 走看看