一路探索者

导航

 

一、GBK字符集汉字编码与区位码间的转换

      对于同一字符,GB2312-80和GBK两种字符集的高低字节是一致的。这里以,“弗”字为例,来说明这个问题。高字节(第一字节)都为184,低字节(第一字节)都为165。

      转换为区位码的方法不一致:对于GB2312-80,高低字节都要减160,即区位码为2405;对于GBK,高低字节无需减160,即区位码为B8A5(分别对应的十进制是为184、165).

      可见,同一字符,两种字符集的区位码不一样。

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

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

 

二、部分GBK字符集

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

8C 0 1 2 3 4 5 6 7 8 9 A B C D E F
4 孈 孉 孊 孋 孌 孍 孎 孏 孒 孖 孞 孠 孡 孧 孨 孫
5 孭 孮 孯 孲 孴 孶 孷 學 孹 孻 孼 孾 孿 宂 宆 宊
6 宍 宎 宐 宑 宒 宔 宖 実 宧 宨 宩 宬 宭 宮 宯 宱
7 宲 宷 宺 宻 宼 寀 寁 寃 寈 寉 寊 寋 寍 寎 寏
8 寑 寔 寕 寖 寗 寘 寙 寚 寛 寜 寠 寢 寣 實 寧 審
9 寪 寫 寬 寭 寯 寱 寲 寳 寴 寵 寶 寷 寽 対 尀 専
A 尃 尅 將 專 尋 尌 對 導 尐 尒 尓 尗 尙 尛 尞 尟
B 尠 尡 尣 尦 尨 尩 尪 尫 尭 尮 尯 尰 尲 尳 尵 尶
C 尷 屃 屄 屆 屇 屌 屍 屒 屓 屔 屖 屗 屘 屚 屛 屜
D 屝 屟 屢 層 屧 屨 屩 屪 屫 屬 屭 屰 屲 屳 屴 屵
E 屶 屷 屸 屻 屼 屽 屾 岀 岃 岄 岅 岆 岇 岉 岊 岋
F 岎 岏 岒 岓 岕 岝 岞 岟 岠 岡 岤 岥 岦 岧 岨

8D 0 1 2 3 4 5 6 7 8 9 A B C D E F
4 岪 岮 岯 岰 岲 岴 岶 岹 岺 岻 岼 岾 峀 峂 峃 峅
5 峆 峇 峈 峉 峊 峌 峍 峎 峏 峐 峑 峓 峔 峕 峖 峗
6 峘 峚 峛 峜 峝 峞 峟 峠 峢 峣 峧 峩 峫 峬 峮 峯
7 峱 峲 峳 峴 峵 島 峷 峸 峹 峺 峼 峽 峾 峿 崀
8 崁 崄 崅 崈 崉 崊 崋 崌 崍 崏 崐 崑 崒 崓 崕 崗
9 崘 崙 崚 崜 崝 崟 崠 崡 崢 崣 崥 崨 崪 崫 崬 崯
A 崰 崱 崲 崳 崵 崶 崷 崸 崹 崺 崻 崼 崿 嵀 嵁 嵂
B 嵃 嵄 嵅 嵆 嵈 嵉 嵍 嵎 嵏 嵐 嵑 嵒 嵓 嵔 嵕 嵖
C 嵗 嵙 嵚 嵜 嵞 嵟 嵠 嵡 嵢 嵣 嵤 嵥 嵦 嵧 嵨 嵪
D 嵭 嵮 嵰 嵱 嵲 嵳 嵵 嵶 嵷 嵸 嵹 嵺 嵻 嵼 嵽 嵾
E 嵿 嶀 嶁 嶃 嶄 嶅 嶆 嶇 嶈 嶉 嶊 嶋 嶌 嶍 嶎 嶏
F 嶐 嶑 嶒 嶓 嶔 嶕 嶖 嶗 嶘 嶚 嶛 嶜 嶞 嶟 嶠

      本例的关键代码如下:

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#的GBK字符集

            Encoding gbkEnd = Encoding.GetEncoding("GBK");

 

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

            int iFrist = array2[0];

            int iSecond = array2[1];            

 

            string strFront, strBack;

            if (iFrist < 10)

                strFront = "0" + iFrist.ToString("X");

            else

                strFront = iFrist.ToString("X");

 

            if (iSecond < 10)

                strBack = "0" + iSecond.ToString("X");

            else

                strBack = iSecond.ToString("X");

 

            textBox2.Text = strFront;

            textBox3.Text = strBack;

        }

    }

}

posted on 2023-10-21 09:52  一路探索者  阅读(84)  评论(0)    收藏  举报