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

标签 c# html .net ascii utf-16

根据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 位的低 7 位 char取相应的 ASCII 码位,而高 9 位为零。因此 UTF-16 应该是 .NET 中 ASCII 的超集。

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

An ASCII-compatible encoding is any encoding that is not a UTF-16 encoding.



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

我的详细问题是:
  • UTF-16 实际上与 ASCII 兼容吗?或者我在这里错过了什么?
  • 如果兼容,为什么 HTML 标准说它不兼容?也许是因为字节顺序?
  • 最佳答案

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

    关于c# - UTF-16 是 ASCII 的超集吗?如果是,为什么根据 HTML 标准 UTF-16 与 ASCII 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61848142/

    相关文章:

    c# - 知道 DLL 在什么上下文中运行

    c# - 如何在C#中调用javascript并获取返回值?

    c# - 将抽象方法重写为可为 null 的引用类型和值类型

    c# - 链增量运算符

    html - 使用 CSS 和 HTML 将有序列表编号替换为前缀值

    c# - JetBrains Rider 以 4.5 框架为目标,没有切换到 4.7 的选项

    c# - 具有多个 float 的固定位置

    iphone - 在 UIWebView 中加载本地 HTML 文件时遇到问题

    php - 无法从 HTML5 和 PHP 表单在 MySQL 表中插入记录

    c# - 如何在 Visual Studio 2008 中分析 MsTest 的单元测试?