代码之家  ›  专栏  ›  技术社区  ›  Hedge

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

  •  1
  • Hedge  · 技术社区  · 15 年前

    我正在读一个流,想知道为什么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 回复  |  直到 15 年前
        1
  •  3
  •   Guffa    15 年前

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

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

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

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

        2
  •  4
  •   Timwi    15 年前

    因为解码字节时, ASCIIEncoding 用问号替换大于127(0x7F)的所有字节( ? )这是一个字符,而 UTF8Encoding 将UTF-8多字节序列正确解码为单个字符(例如,三个字节232170158变为单个字符ž)。

        3
  •  4
  •   Adonais    15 年前

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

        4
  •  -1
  •   Martin Törnwall    15 年前

    可能消息中包含一些无法编码为单个字节的字符 UTF-8 .