编码ASCII和UTF8的字符串有不同的长度!

时间:2010-10-08 21:56:57

标签: c# .net encoding

我正在阅读一个流,我想知道为什么UTF-8编码的字符串比ASCII字符串短。

  ASCIIEncoding encoder = new ASCIIEncoding();
  UTF8Encoding enc = new UTF8Encoding();   
  string response = encoder.GetString(message, 0, bytesRead); //4096
  string responseUtf8 = enc.GetString(message, 0, bytesRead);  //3955

4 个答案:

答案 0 :(得分:4)

UTF-8处理的字符串与ASCII不同:在UTF-8上,每个字符的长度可以是1,2或3个字节。但是,ASCII将每个字节视为一个字符。 C#UTF-8编码器计算格式良好的UTF-8字符,而不是字节。我希望这会对你有所帮助。

答案 1 :(得分:4)

因为在解码字节时,ASCIIEncoding用一个问号(?)替换所有大于127(0x7F)的字节,而UTF8Encoding解码UTF-8多个字节序列正确地成为单个字符(例如,三个字节232,170,158成为单个字符语)。

答案 2 :(得分:3)

那是因为流实际上是UTF-8编码的。如果是ASCII编码,字符串将是相同的。

当读取为ASCII时,表示0-127代码集之外的字符的字节组合将被读取为单独的字符,它们看起来像垃圾。

当读为UTF-8时,字节组合将被解码为正确的字符,每个多字节组合最终为单个字符。

(注意:字符串不是编码的,而是编码的流。您将ASCII或UTF-8的流解码为Unicode字符串。)

答案 3 :(得分:-1)

也许该消息包含一些无法在UTF-8中编码为单个字节的字符。