【问题标题】:C# UTF-8 from bytes confusion来自字节混淆的 C# UTF-8
【发布时间】:2025-11-26 08:05:01
【问题描述】:

为什么

System.Text.Encoding.UTF8.GetString(new byte [] { (byte)0xa0 });

没有结果

"\u00a0"

?

我将返回 "\ufffd"

根据https://en.wikipedia.org/wiki/Non-breaking_space 0xa0 应该是UTF-8 中有效的不间断空格。

【问题讨论】:

    标签: c# unicode character-encoding


    【解决方案1】:

    0xa0 应该是 UTF-8 中有效的不间断空格。

    不,不是。这在 Latin1 和 Unicode(或 UTF-16 和 UTF-32)字符集中都有效。

    在 UTF-8 编码中,它被编码为C2 A0。一般情况下,只有低于0x80 的字符才会映射到UTF-8 中的单字节。

    【讨论】:

    • 啊,谢谢。所以如果我有一个 0xa0 字节的 8 字节文本应该是一个空格,那么它最有可能是 Latin1 编码吗?
    • 有几种编码可以将 U+00A0 映射到 0xA0。 Latin-1(反过来又在该名称的 ISO 和 Windows 编码之间模棱两可)是一个可能的选择,但不确定。
    • @CoderBrien:很可能。或任何其他老式的单字节编码。
    • 优秀。我很难摸索编码,但这为我打开了大门。非常感谢!!!