ASCII:
数字:48-57
空格:32
大写英文:65-90
小写英文:97-122
几个结论:
- ASCII不能保存中文;
- UTF8是变长编码。在对ASCII字符编码时,UTF更省空间,只占1个字节,与ASCII编码方式和长度相同;Unicode在对ASCII字符编码时,占用2个字节,且第2个字节补零。
- UTF8在对中文编码时需要占用3个字节;Unicode对中文编码则只需要2个字节。
===============================程序如下===================================
string s1 = "b"; string s2 = "副"; Console.WriteLine("----------------ASCII-----------------"); Console.WriteLine(Encoding.ASCII.GetBytes(s1).Length); Console.WriteLine(Encoding.ASCII.GetBytes(s2).Length); Console.WriteLine("----------------Default-----------------"); Console.WriteLine(Encoding.Default.EncodingName); Console.WriteLine(Encoding.Default.GetBytes(s1).Length); Console.WriteLine(Encoding.Default.GetBytes(s2).Length); Console.WriteLine("----------------Unicode-----------------"); Console.WriteLine(Encoding.Unicode.GetBytes(s1).Length); Console.WriteLine(Encoding.Unicode.GetBytes(s2).Length); Console.WriteLine("----------------UTF8-----------------"); Console.WriteLine(Encoding.UTF8.GetBytes(s1).Length); Console.WriteLine(Encoding.UTF8.GetBytes(s2).Length);
string[] strArray = { "b", "abcd", "乙", "甲乙丙丁" }; byte[] buffer; string mode, back; foreach (string str in strArray) { for (int i = 0; i <= 2; i++) { if (i == 0) { buffer = Encoding.ASCII.GetBytes(str); back = Encoding.ASCII.GetString(buffer, 0, buffer.Length); mode = "ASCII"; } else if (i == 1) { buffer = Encoding.UTF8.GetBytes(str); back = Encoding.UTF8.GetString(buffer, 0, buffer.Length); mode = "UTF8"; } else { buffer = Encoding.Unicode.GetBytes(str); back = Encoding.Unicode.GetString(buffer, 0, buffer.Length); mode = "Unicode"; } Console.WriteLine("Mode: {0}, String: {1}, Buffer.Length: {2}",mode, str, buffer.Length); Console.Write("Buffer: "); for (int j = 0; j <= buffer.Length - 1; j++) { Console.Write(buffer[j] + " "); } Console.WriteLine(""); Console.WriteLine("nRetrived: {0}", back); Console.WriteLine("--------------------------------------------"); } }