UTF-16是ASCII的超集吗?如果是,根据HTML标准,为什么UTF-16与ASCII不兼容?

问题描述 投票:0回答:1

根据Wikipedia article on UTF-16,“ ... [UTF-16]也是唯一与ASCII不兼容的网络编码。” (在摘要的末尾。)此语句引用HTML标准。 这是一个错误的陈述吗?

我主要是C#/ .NET开发人员,.NET和.NET Core在内部使用UTF-16表示字符串。我可以肯定UTF-16是ASCII的超集,因为我可以轻松编写显示所有ASCII字符的代码:

public static void Main()
{
    for (byte currentAsciiCharacter = 0; currentAsciiCharacter < 128; currentAsciiCharacter++)
    {
        Console.WriteLine($"ASCII character {currentAsciiCharacter}: \"{(char) currentAsciiCharacter}\"");
    }
}

当然,控制字符会使控制台输出混乱,但我想我的陈述很清楚:16位char的低7位采用相应的ASCII码点,而高9位为零。因此,UTF-16应该是.NET中ASCII的超集。

我试图找出为什么HTML标准说UTF-16与ASCII不兼容,但看起来像they simply define it that way

ASCII兼容编码是不是UTF-16编码的任何编码。

我找不到任何解释说明为什么UTF-16在其规格中不兼容。

我的详细问题是:

  1. UTF-16是否实际上与ASCII兼容?还是我在这里错过了什么?
  2. 如果兼容,为什么HTML标准说它不兼容?也许是因为字节顺序?
c# html .net ascii utf-16
1个回答
1
投票

ASCII是7位编码,并存储在一个字节中。 UTF-16使用2个字节的块(ord),这使其立即不兼容。 UTF-8使用一个字节的块,并且用于拉丁字母与ASCII匹配。

© www.soinside.com 2019 - 2024. All rights reserved.