首先復習一下計算機基礎知識:
計算機中最底層的數據都是用二進制及0和1來表示的。每個0或1稱作1位,第8位二進制數叫做1個字節,它可以表示ASCII碼中的一個字符。中文計算機中用兩個字節即16位二進制來表示一個漢字。而在Unicode編碼中所有的符號(包括漢字,英文,標題及其它眾多符號)都是為兩字節(16)位來表示。
在System.Text命名空間中包含眾多編碼的類,可供進行操作及轉換,下面用兩個實例來進行區位碼及漢字之間的互換,希望能起到舉一反三的效果,讓大家可以輕松處理文字編碼方面的問題:
|
using System; using System.Text; class CodingChange { public string CharacterToCoding(string character) { string coding = ""; for (int i = 0; i<character.Length; i++ ) { byte[] bytes = System.Text.Encoding.Unicode.GetBytes(character.Substring(i,1)); //取出二進制編碼內容 string lowCode = System.Convert.ToString(bytes[0], 16); //取出低字節編碼內容(兩位16進制) if (lowCode.Length == 1) lowCode = "0" + lowCode; string hightCode = System.Convert.ToString(bytes[1], 16);//取出高字節編碼內容(兩位16進制) if (hightCode.Length == 1) hightCode = "0" + hightCode; coding += (lowCode + hightCode);//加入到字符串中, } return coding; } public string CodingToCharacter(string coding) { string characters = ""; if (coding.Length % 4 != 0)//編碼為16進制,必須為4的倍數。 { throw new System.Exception("編碼格式不正確"); } for (int i = 0; i<coding.Length; i+=4 ) //每四位為一個漢字 { byte[] bytes = new byte[2]; string lowCode = coding.Substring(i, 2); //取出低字節,并以16進制進制轉換 bytes[0] = System.Convert.ToByte(lowCode, 16); string highCode = coding.Substring(i + 2, 2); //取出高字節,并以16進制進行轉換 bytes[1] = System.Convert.ToByte(highCode, 16); string character = System.Text.Encoding.Unicode.GetString(bytes); characters += character; } return characters; } public static void Main() { CodingChange code = new CodingChange(); string coding = code.CharacterToCoding("我們的大中國,是好在的一個家."); Console.WriteLine(coding); Console.WriteLine(code.CodingToCharacter(coding)); } }; |
最后輸出的結果是:
C:\>test
1162ec4e847627592d4efd560cff2f667d5928578476004e2a4eb65b2e00
我們的大中國,是好在的一個家.
C:\>