ant*_*ony 2 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();
}
Run Code Online (Sandbox Code Playgroud)
考虑两个字符串,每个字符串显示为"ë",但具有不同的编码.DumpString将产生以下输出:
ë:e(65)(08)
ë:ë(eb)
代码如下所示:
DumpString(string1);
DumpString(string2);
Run Code Online (Sandbox Code Playgroud)
如何使用System.Text.Encoding将string2转换为与string1等效的字节.
它们没有不同的编码.C#中的字符串总是UTF-16(因此,您不应该使用byte迭代字符串,因为您将丢失前8位).他们所拥有的是不同的规范化形式.
你的第一个字符串是"\ u0065\u0308":LATIN SMALL LETTER E + COMBINING DIAERESIS.这是分解形式(NFD).
第二个是"\ u00EB":LATIN SMALL LETTER E with DIAERESIS.这是预先组合的形式(NFC).
你可以用它们之间进行转换string.Normalize.
| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |