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

Tom*_*bes 0 c# encoding utf-8

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

string s ="Menü";

我想获得UTF-8代码点:

预期结果:

\x4D\x65\x6E\xC3\xBC
Run Code Online (Sandbox Code Playgroud)

预期结果已通过在线UTF-8编码器/解码器Unicode代码转换器v8.1进行验证

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

更新:

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

Jon*_*eet 8

没有"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);
Run Code Online (Sandbox Code Playgroud)

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