字符串是由一个个字符组成的,每个字符又有一个或多个字节来表示,每个字节又由8个bit位来表示
在C#里 字符串通常由string来声明,字符由char来声明,字节由byte来表示,位由bit来表示,具体分析见下面的测试代码分析:
完整测试代码:
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Linq.Expressions;
5 using System.Text;
6 using System.Threading.Tasks;
7 using System.IO;
8 namespace CSharpRumenJD
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14
15 string unicodestr = "啊?/123";
16 Console.WriteLine("字符串:" + unicodestr);
17 Console.WriteLine("字符长度:" + unicodestr.Length);
18 Console.WriteLine("Unicode字节长度:" + System.Text.Encoding.Unicode.GetByteCount(unicodestr));
19 var unicodebytes = System.Text.Encoding.Unicode.GetBytes(unicodestr);
20 Console.WriteLine("gb2312字节长度:" + Encoding.GetEncoding("gb2312").GetByteCount(unicodestr));
21 var gb2312bytes = System.Text.Encoding.GetEncoding("gb2312").GetBytes(unicodestr);
22 #region 乱码测试
23 var gb2312tounidecodestr = System.Text.Encoding.Unicode.GetString(gb2312bytes);
24 Console.WriteLine("gb2312bytes转化成Unicode字符串:" + gb2312tounidecodestr);
25 var gb2312str = System.Text.Encoding.GetEncoding("gb2312").GetString(gb2312bytes);
26 Console.WriteLine("gb2312bytes字符串:" + gb2312str);
27 #endregion
28 #region 打印二进制数据
29 int capacity = gb2312bytes.Length * 8;
30 StringBuilder sb = new StringBuilder(capacity);
31 for (int i = 0; i < gb2312bytes.Length; i++)
32 {
33 sb.Append(gb2312bytes[i] + ":" + Convert.ToString(gb2312bytes[i], 2).PadLeft(8, '0') + "|");
34 }
35 Console.WriteLine(sb.ToString().TrimEnd('|'));
36 #endregion
37 StreamWriter sw = new StreamWriter("1.txt", false, System.Text.Encoding.Unicode);
38 sw.Write(unicodestr);
39 sw.Close();
40 StreamWriter sw1 = new StreamWriter("2.txt", false, Encoding.GetEncoding("gb2312"));
41 sw1.Write(unicodestr);
42 sw1.Close();
43 Console.ReadKey();
44 }
45 }
46 }
View Code
测试结果: