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

C# UTF-16是ASCII的超集吗?如果是,根据HTML标准,为什么UTF-16与ASCII不兼容?,c#,html,.net,ascii,utf-16,C#,Html,.net,Ascii,Utf 16,根据“…[UTF-16]也是唯一一种与ASCII不兼容的web编码。”(在摘要末尾)这句话指的是HTML标准这是错误的说法吗? 我主要是一名C#/.NET开发人员,.NET和.NET内核在内部使用UTF-16来表示字符串。我非常确定UTF-16是ASCII的超集,因为我可以轻松编写显示所有ASCII字符的代码: publicstaticvoidmain() { 对于(字节CurrentAsciCharacter=0;CurrentAsciCharacter

根据“…[UTF-16]也是唯一一种与ASCII不兼容的web编码。”(在摘要末尾)这句话指的是HTML标准这是错误的说法吗?

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

publicstaticvoidmain()
{
对于(字节CurrentAsciCharacter=0;CurrentAsciCharacter<128;CurrentAsciCharacter++)
{
WriteLine($“ASCII字符{currentAsciiCharacter}:\”{(字符)currentAsciiCharacter}\”);
}
}
当然,控制字符会弄乱控制台输出,但我认为我的说法很清楚:16位
char
的低7位取相应的ASCII码点,而高9位为零。因此,UTF-16应该是.NET中ASCII的超集

我试图找出为什么HTML标准说UTF-16与ASCII不兼容,但似乎是:

ASCII兼容编码是指非UTF-16编码的任何编码

我找不到任何解释为什么UTF-16在他们的规范中不兼容

我的详细问题是:

  • UTF-16实际上与ASCII兼容吗?还是我错过了什么
  • 如果它是兼容的,为什么HTML标准说它不兼容?也许是因为字节排序

  • ASCII是7位编码,存储在单个字节中。UTF-16使用2字节块(ord),这使得它立即不兼容。UTF-8使用单字节块,拉丁字母与ASCII匹配。从外观上看,UTF-8设计为向后兼容ASCII编码

    UTF-16是2字节编码,不是ASCII的超集。Unicode与ASCII共享前128个代码点。当仅使用ASCII字符时,UTF-8与ASCII兼容。否则,它会将Unicode编码为多个字节(不是7位干净的)。但是标准的ASCII编码只有128个码点(7位)?我不能说这些完全是UTF-16的一部分,因此后者是一个超集吗?当然,有扩展的ASCII编码,但我不想讨论它们。Unicode!=UTF-16。Unicode有多种编码:UTF-8、UTF-16(LE/BE/Java)、UTF-32、SCSU。。哪个可以。。编码Unicode。UTF-16是多字节编码,与单字节ASCII不兼容。不支持unicode的程序最多只能在所有编码的ASCII范围字符之间显示NUL字符。我知道unicode提供了代码点,不同的编码告诉我们这些代码点是如何以字节存储的。我的实际问题是UTF-16字符的低7位编码是否与ASCII中的相应位不同。有时,用短语表达正确的问题并不那么容易……当一个C#程序将一个Unicode字符串(存储为UTF-16)写入一个文件或流时,它将按照流的目标编码将其写入正确的字节序列。这就是C#程序(内存字符串中的UTF-16)可以编写UTF-8文件的原因。感谢您指出单字节和双字节长度之间的差异。但是根据这个论点,UTF-32也应该是不兼容的?引用限制为“网络编码”,所以任何非“网络编码”都不适用。根据文章,需要指定/引用“web编码”列表,以消除歧义。