c#上位機開發(五)——開發一個漢字編碼轉換

開始之前先講一下漢字編碼到底是個啥?

漢字編碼就是漢字對應於計算機中的編碼存儲,主要有以下幾種常見的漢字字符集編碼:

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("數據轉換錯誤,請輸入數字.", "錯誤");
}
                


下面附一下,工程下載地址

後續有時間的話把其他編碼方式也添加上去,後續再修改本文。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章