C#中如何获得GB2312字符集汉字的区位码?

发布时间 2023-10-21 10:00:12作者: 一路探索者

一、GB2312字符集汉字编码间的转换

1、区位码转换为国标码方法如下:

国标码高位字节=(区号)H+20H

国标码低位字节=(位号)H+20H

区位码转换为国标码的方法是加2020H

 

2、国标码转换为机内码方法如下:

机内码高位字节=(国标码)H+80H

机内码低位字节=(国标码)H+80H

国标码转换为机内码的方法是加8080H

 

3、区位码转换为机内码方法如下:

可见,区位码到机内码加了两次:20H + 80H = 32 + 128 = 160 = A0H

因此,区位码转换机内码的方法,是高位字节和低位字节加160。

机内码高位字节=(区号)H+A0H

机内码低位字节=(位号)H+A0H

区位码转换为机内码的方法是加A0 A0H

      

4、机内码转换为区位码方法如下:

机内码转换区位码的方法,是高位字节和低位字节减160。

机内码转换为区位码的方法是减A0A0H

 

注意:计算机使用的字符都为机内码!

GB2312字符集的区位码为十进制数来表示。

 

二、部分GB2312字符集

    为帮助理解,以下提供部分GB2312字符集。

01 0 1 2 3 4 5 6 7 8 9
0     、 。 · ˉ ˇ ¨ 〃 々
1 — ~ ‖ … ‘ ’ “ ” 〔 〕
2 〈 〉 《 》 「 」 『 』 〖 〗
3 【 】 ± × ÷ ∶ ∧ ∨ ∑ ∏
4 ∪ ∩ ∈ ∷ √ ⊥ ∥ ∠ ⌒ ⊙
5 ∫ ∮ ≡ ≌ ≈ ∽ ∝ ≠ ≮ ≯
6 ≤ ≥ ∞ ∵ ∴ ♂ ♀ ° ′ ″
7 ℃ $ ¤ ¢ £ ‰ § № ☆ ★
8 ○ ● ◎ ◇ ◆ □ ■ △ ▲ ※
9 → ← ↑ ↓ 〓
 
02 0 1 2 3 4 5 6 7 8 9
0   ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ
1 ⅹ       ⒈ ⒉ ⒊
2 ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔
3 ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⑴ ⑵ ⑶
4 ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀
5 ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ① ② ③
6 ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩   ㈠
7 ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ 
8  Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ
9 Ⅹ Ⅺ Ⅻ  
 
03 0 1 2 3 4 5 6 7 8 9
0   ! " # ¥ % & ' ( )
1 * + , - . / 0 1 2 3
2 4 5 6 7 8 9 : ; < =
3 > ? @ A B C D E F G
4 H I J K L M N O P Q
5 R S T U V W X Y Z [
6 \ ] ^ _ ` a b c d e
7 f g h i j k l m n o
8 p q r s t u v w x y
9 z { | }  ̄

 

17 0 1 2 3 4 5 6 7 8 9
0   薄 雹 保 堡 饱 宝 抱 报 暴
1 豹 鲍 爆 杯 碑 悲 卑 北 辈 背
2 贝 钡 倍 狈 备 惫 焙 被 奔 苯
3 本 笨 崩 绷 甭 泵 蹦 迸 逼 鼻
4 比 鄙 笔 彼 碧 蓖 蔽 毕 毙 毖
5 币 庇 痹 闭 敝 弊 必 辟 壁 臂
6 避 陛 鞭 边 编 贬 扁 便 变 卞
7 辨 辩 辫 遍 标 彪 膘 表 鳖 憋
8 别 瘪 彬 斌 濒 滨 宾 摈 兵 冰
9 柄 丙 秉 饼 炳

 

      本例的关键代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Text; //引用Encoding类

 

namespace Ex04_19

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            textBox1.Text = "弗";

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            string strSource = textBox1.Text.Trim();

 

            //C#缺省的字符集为GB2312-80

            Encoding defEnd = Encoding.Default;

 

            byte[] array2 = defEnd.GetBytes(strSource);

            int iFrist = array2[0];

            int iFrist1 = iFrist - 160;

            int iSecond = array2[1];

            int iSecond1 = iSecond - 160;

 

            string strFront, strBack;

            if (iFrist1 < 10)

                strFront = "0" + iFrist1.ToString();

            else

                strFront = iFrist1.ToString();

 

            if (iSecond1 < 10)

                strBack = "0" + iSecond1.ToString();

            else

                strBack = iSecond1.ToString();

 

            textBox2.Text = strFront;

            textBox3.Text = strBack;

        }

    }

}