【转】UTF8字符串转换为汉字 c#,转自游戏开发主席

时间:2023-01-10 11:47:16
  1 using System;
2
3
4
5 /// <summary>
6 /// UTF8字符串转换为汉字用的类
7 /// 转换如"\\u8d35"之类的字符串为对应的汉字
8 /// </summary>
9 class UTF8String
10 {
11 string m_strContent = "";
12 /// <summary>
13 /// 构造函数
14 /// </summary>
15 /// <param name="content">要转换的字符串</param>
16 public UTF8String(string content)
17 {
18 m_strContent = content;
19 }
20 public string getContent()
21 {
22 return m_strContent;
23 }
24 /// <summary>
25 /// 转换函数
26 /// </summary>
27 /// <returns>返回转换好的字符串</returns>
28 public string ToString()
29 {
30 string reString = null;
31 char[] content = m_strContent.ToCharArray(); //把字符串变为字符数组,以进行处理
32 for (int i = 0; i < content.Length; i++) //遍历所有字符
33 {
34 if (content[i] == '\\') //判断是否转义字符 \
35 {
36 switch (content[i + 1]) //判断转义字符的下一个字符是什么
37 {
38 case 'u': //转换的是汉字
39 case 'U':
40 reString += HexArrayToChar(content, i + 2); //获取对应的汉字
41 i = i + 5;
42 break;
43 case '/': //转换的是 /
44 case '\\': //转换的是 \
45 case '"':
46 break;
47 default: //其它
48 reString += EscapeCharacter(content[i + 1]); //转为其它类型字符
49 i = i + 1;
50 break;
51 }
52 }
53 else
54 reString += content[i]; //非转义字符则直接加入
55 }
56 return reString;
57 }
58
59 /// <summary>
60 /// 字符数组转对应汉字字符
61 /// </summary>
62 /// <param name="content">要转换的数字</param>
63 /// <param name="startIndex">起始位置</param>
64 /// <returns>对应的汉字</returns>
65 private char HexArrayToChar(char[] content, int startIndex)
66 {
67 char[] ac = new char[4];
68 for (int i = 0; i < 4; i++) //获取要转换的部分
69 ac[i] = content[startIndex + i];
70 string num = new string(ac); //字符数组转为字符串
71 return HexStringToChar(num);
72 }
73
74 /// <summary>
75 /// 转义字符转换函数
76 /// 转换字符为对应的转义字符
77 /// </summary>
78 /// <param name="c">要转的字符</param>
79 /// <returns>对应的转义字符</returns>
80 private char EscapeCharacter(char c)
81 {
82 char rc;
83 switch (c)
84 {
85 case 't':
86 c = '\t';
87 break;
88 case 'n':
89 c = '\n';
90 break;
91 case 'r':
92 c = '\r';
93 break;
94 case '\'':
95 c = '\'';
96 break;
97 case '0':
98 c = '\0';
99 break;
100 }
101 return c;
102 }
103
104 /// <summary>
105 /// 字符串转对应汉字字符
106 /// 只能处理如"8d34"之类的数字字符为对应的汉字
107 /// 例子:"9648" 转为 '陈'
108 /// </summary>
109 /// <param name="content">转换的字符串</param>
110 /// <returns>对应的汉字</returns>
111 public static char HexStringToChar(string content)
112 {
113 int num = Convert.ToInt32(content, 16);
114 return (char)num;
115 }
116
117 /// <summary>
118 /// 把string转为UTF8String类型
119 /// </summary>
120 /// <param name="content"></param>
121 /// <returns></returns>
122 public static UTF8String ValueOf(string content)
123 {
124 string reString = null;
125 char[] ac = content.ToCharArray();
126 int num;
127 foreach (char c in ac)
128 {
129 num = (int)c;
130 string n = num.ToString("X2");
131 if (n.Length == 4)
132 reString += "\\u" + n;
133 else
134 reString += c;
135 }
136 return new UTF8String(reString);
137 }
138
139 }