C#char / byte编码相等

时间:2010-10-08 02:57:12

标签: c# unicode encoding character-encoding

我有一些代码将字符串转储到stdout来检查它们的编码,它看起来像这样:

    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等效的字节。

2 个答案:

答案 0 :(得分:7)

他们没有不同的编码。 C#中的字符串总是UTF-16(因此,您不应该使用byte来迭代字符串,因为您将丢失前8位)。它们的含义不同normalization forms

你的第一个字符串是“\ u0065 \ u0308”:LATIN SMALL LETTER E + COMBINING DIAERESIS。这是分解的形式(NFD)。

第二个是“\ u00EB”:LATIN SMALL LETTER E with DIAERESIS。这是预合成表单(NFC)。

您可以使用string.Normalize进行转换。

答案 1 :(得分:4)

您正在寻找String.Normalize method