如何获得C#字符串的UTF-8代码点?

时间:2016-08-10 10:58:20

标签: c# encoding utf-8

我在C#中有一个德语字符串

string s =“Menü”;

我想获得UTF-8代码点:

预期结果:

\x4D\x65\x6E\xC3\xBC

预期结果已通过online UTF-8 encoder/decoderUnicode code converter v8.1

进行验证

我尝试了很多转换方法但是我无法获得预期的结果。

更新:

好笑,问题不在源代码中,而是输入文件中的错误编码:-)这些答案对我有很大帮助。

3 个答案:

答案 0 :(得分:7)

没有“UTF-8代码点” - 有UTF-8代码单位或Unicode代码点。

在字符串Menü中,有4个代码点:

  • U + 004D
  • U + 0065
  • U + 006E
  • U + 00FC

对于BMP字符(即U + 0000到U + FFFF范围内的字符),它就像迭代字符串中的char值一样简单。对于非BMP字符来说有点棘手。 StringInfo在这里看起来很有帮助,但它包括在迭代文本元素时组合字符。在字符串中发现代理对并不是非常困难,但我并不认为有一种非常简单的方法可以迭代字符串中的所有代码点。

查找UTF-8代码单位 - 即字符串的UTF-8编码表示为字节,很简单:

byte[] bytes = Encoding.UTF8.GetBytes(text);

这将为您提供您在问题中列出的五个字节:0x4d,0x65,0x6e,0xc3,0xbc。

答案 1 :(得分:3)

使用Encoding.UTF8,例如下面。

        string menu = "Menü";
        Console.WriteLine(menu);

        var utf8 = Encoding.UTF8;
        byte[] utfBytes = utf8.GetBytes(menu);
        foreach(byte b in utfBytes)
        {
            Console.WriteLine("Hex: {0:X}", b);
        }

        string menu2 = utf8.GetString(utfBytes, 0, utfBytes.Length);
        Console.WriteLine(menu2);

答案 2 :(得分:1)

您需要明确转换:

var utf8 = Encoding.UTF8.GetBytes("Menü");

utf8包含0x4d,0x65,0x6e,0xc3,0xbc。