【问题标题】:C# char/byte encoding equalityC# char/byte 编码相等
【发布时间】:2011-04-22 16:34:26
【问题描述】:

我有一些代码可以将字符串转储到标准输出以检查它们的编码,它看起来像这样:

    private void DumpString(string s)
    {   
        System.Console.Write("{0}: ", s);
        foreach (byte b in s)
        {   
            System.Console.Write("{0}({1}) ", (char)b, b.ToString("x2"));
        }       
        System.Console.WriteLine();
    }

考虑两个字符串,每个字符串都显示为“ë”,但编码不同。 DumpString 将产生以下输出:

ë: e(65)(08)
ë: ë(eb)

代码如下所示:

DumpString(string1);
DumpString(string2);

如何使用 System.Text.Encoding 将 string2 转换为与 string1 等效的字节。

【问题讨论】:

    标签: c# unicode encoding character-encoding


    【解决方案1】:

    它们没有不同的编码。 C# 中的字符串始终为 UTF-16(因此,您不应使用 byte 来遍历字符串,因为您会丢失前 8 位)。他们所拥有的是不同的normalization forms

    您的第一个字符串是“\u0065\u0308”:拉丁小写字母 E + COMBINING DIAERESIS。这是分解的形式(NFD)。

    第二个是“\u00EB”:带分音符号的拉丁文小写字母 E。这是预组合表单 (NFC)。

    您可以使用string.Normalize 在它们之间进行转换。

    【讨论】:

      【解决方案2】:

      您正在寻找String.Normalize method

      【讨论】:

        猜你喜欢
        • 2013-02-05
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-11
        • 2013-04-28
        • 2015-04-11
        相关资源
        最近更新 更多