首先復(fù)習(xí)一下計(jì)算機(jī)基礎(chǔ)知識:
計(jì)算機(jī)中最底層的數(shù)據(jù)都是用二進(jìn)制及0和1來表示的。每個(gè)0或1稱作1位,第8位二進(jìn)制數(shù)叫做1個(gè)字節(jié),它可以表示ASCII碼中的一個(gè)字符。中文計(jì)算機(jī)中用兩個(gè)字節(jié)即16位二進(jìn)制來表示一個(gè)漢字。而在Unicode編碼中所有的符號(包括漢字,英文,標(biāo)題及其它眾多符號)都是為兩字節(jié)(16)位來表示。
在System.Text命名空間中包含眾多編碼的類,可供進(jìn)行操作及轉(zhuǎn)換,下面用兩個(gè)實(shí)例來進(jìn)行區(qū)位碼及漢字之間的互換,希望能起到舉一反三的效果,讓大家可以輕松處理文字編碼方面的問題:
|
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)); //取出二進(jìn)制編碼內(nèi)容 string lowCode = System.Convert.ToString(bytes[0], 16); //取出低字節(jié)編碼內(nèi)容(兩位16進(jìn)制) if (lowCode.Length == 1) lowCode = "0" + lowCode; string hightCode = System.Convert.ToString(bytes[1], 16);//取出高字節(jié)編碼內(nèi)容(兩位16進(jìn)制) 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進(jìn)制,必須為4的倍數(shù)。 { throw new System.Exception("編碼格式不正確"); } for (int i = 0; i<coding.Length; i+=4 ) //每四位為一個(gè)漢字 { byte[] bytes = new byte[2]; string lowCode = coding.Substring(i, 2); //取出低字節(jié),并以16進(jìn)制進(jìn)制轉(zhuǎn)換 bytes[0] = System.Convert.ToByte(lowCode, 16); string highCode = coding.Substring(i + 2, 2); //取出高字節(jié),并以16進(jìn)制進(jìn)行轉(zhuǎn)換 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("我們的大中國,是好在的一個(gè)家."); Console.WriteLine(coding); Console.WriteLine(code.CodingToCharacter(coding)); } }; |
最后輸出的結(jié)果是:
C:\>test
1162ec4e847627592d4efd560cff2f667d5928578476004e2a4eb65b2e00
我們的大中國,是好在的一個(gè)家.
C:\>