一、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;
}
}
}