開始之前先講一下漢字編碼到底是個啥?
漢字編碼就是漢字對應於計算機中的編碼存儲,主要有以下幾種常見的漢字字符集編碼:
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("數據轉換錯誤,請輸入數字.", "錯誤");
}
下面附一下,工程下載地址
後續有時間的話把其他編碼方式也添加上去,後續再修改本文。。。