Unicode编码之我见
先从编码说起吧,计算机只认识二进制,为了能让计算机识别,我们就定义一个编码标准吧.于是就有了ASCII.
ASCII编码是目前计算机最通用的编码标准。ASCII编码用一个字节存储,因此最多能表示256个字符。
这256个字符对于英语国家来说,足够了,但对于中文等繁杂的文字系统,却远远不够,为了解决这一问题, 国际组织制定了Unicode编码,
它为每种语言中的每个字符设定了唯一的二进制编码.
它是一种可以容纳世界上所有文字和符号的字符编码方案 。
Unicode定义了字符编码方案,但没定义具体实现方案.
根据实现方案不同,分为UTF-8、UTF-16、UTF-32. UTF-8,UTF-8是互联网上使用最广的一种存储方案.
Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,我们可以用UltraEdit中的”十六进制功能“查看文件的编码,
Unicode编码的文件会以FF FE开头
Unicode big endian (大头方式存储)编码的文件会以FE FF开头
UTF-8 编码的文件会以EF BB BF开头
Unicode 编码转换
Json传输中文时为了防止乱码,通常我们会进行Unicode编码 ,如{userID:"001",nickname:"\u65e0\u8bed\u68a6" }
下面的代码,将能完成Unicode的与普通字符的转换功能
1
/// <summary>
2
/// 将单个Unicode字符串转换为普通文字,如\u65e0转换为普通文字时,请这样调用ConvertStr("65e0")
3
/// </summary>
4
/// <param name="unicodeStr"></param>
5
/// <returns></returns>
6
private string ConvertStr(string unicodeStr)
7
{
8
if (unicodeStr.Length != 4)
9
{
10
return String.Empty;
11
}
12
13
byte byteAfter = Convert.ToByte( unicodeStr.Substring(0,2),16);
14
byte byteBefore = Convert.ToByte(unicodeStr.Substring(2), 16);
15
16
return System.Text.Encoding.Unicode.GetString(new byte[] { byteBefore, byteAfter });
17
}
18
19
/// <summary>
20
/// 将单个字符转换为16进制的Unicode字符串
21
/// </summary>
22
/// <param name="str"></param>
23
/// <returns></returns>
24
public string ConvertUnicode(string str)
25
{
26
Byte[] arrByte = System.Text.Encoding.Unicode.GetBytes(str);
27
28
string strAfter = Convert.ToString(arrByte[0],16);
29
string strBefore = Convert.ToString(arrByte[1],16);
30
31
return strBefore + strAfter;
32
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32
