X.ToCharArray()。长度EQUALS GetBytes(X).Length

时间:2011-03-31 05:03:15

标签: c# .net unicode encoding character-encoding

string s = "test";
int charCount = s.ToCharArray().Length;
int byteCount = System.Text.Encoding.Default.GetBytes(s).Length;

什么时候可以(charCount!= byteCount)发生?我相信Unicode字符但不是一般情况下。

.NET支持Unicode字符,但它是.NET的默认(System.Text.Encoding.Default)编码吗? “System.Text.Encoding.Default”显示“System.Text.SBCSCodePageEncoding”作为单字节的编码。

2 个答案:

答案 0 :(得分:5)

默认编码为UTF8,每个字符可包含1-4个字节的空间。

当字符串s中的任何字符使用超过1个字节时,charCount和byteCount将不相等。

要强制使用4个字节,可以使用Unicode编码进行检查,然后byteCount将= 8。

int byteCount = System.Text.Encoding.Unicode.GetBytes(s).Length;

答案 1 :(得分:1)

每当使用每个字符使用多个字节的编码时,字符数将与字节数不同。这是几种编码的情况,包括UTF-16(.NET字符串的内部表示)和UTF-32。