如何将表情符号转换为UTF-32 /转义unicode?

我正在研究WPF中的聊天应用程序,我想在其中使用表情符号。 我正在研究WPF应用程序。 我想阅读来自Android / iOS设备并显示各自图像的表情符号。

在WPF上,我看到一个黑色的表情符号 这个 。 我以某种方式得到了一个表情符号图标库,它们以相应的hex/转义unicode值保存。 所以,我想将表情符号的这些符号转换为UTF-32 /转义的unicode,以便我可以直接用它们替换相关的表情符号图标。

我试图将表情符号转换为它的unicode,但最终得到一个带有几个符号的不同字符串,这些符号具有不同的unicode。

string unicodeString = "\u1F642"; // represents 🙂 Encoding unicode = Encoding.Unicode; byte[] unicodeBytes = unicode.GetBytes(unicodeString); char[] unicodeChars = new char[unicode.GetCharCount(unicodeBytes, 0, unicodeBytes.Length)]; unicode.GetChars(unicodeBytes, 0, unicodeBytes.Length, unicodeChars, 0); string asciiString = new string(unicodeChars); 

任何帮助表示赞赏!!

您的转义Unicode字符串在C#中无效。

 string unicodeString = "\u1F642"; // represents 🙂 

这段代码并不代表“略微笑脸”,因为C#只尊重前4个字符 – 代表UTF-16(带2个字节)。

所以你真正得到的是代表1F64的字母,然后是简单的2http://www.fileformat.info/info/unicode/char/1f64/index.htm

所以这个: ὤ2

如果要键入带有4个字节的hex并获取必须使用的相应字符串:

 var unicodeString = char.ConvertFromUtf32(0x1F642); 

https://msdn.microsoft.com/en-us/library/system.char.convertfromutf32(v=vs.110).aspx

或者你可以像这样写:

 \uD83D\uDE42 

这个字符串可以像这样解析,以获得您想要的结果,这也是我们开始使用的hex值:

 var x = char.ConvertFromUtf32(0x1F642); var enc = new UTF32Encoding(true, false); var bytes = enc.GetBytes(x); var hex = new StringBuilder(); for (int i = 0; i < bytes.Length; i++) { hex.AppendFormat("{0:x2}", bytes[i]); } var o = hex.ToString(); //result is 0001F642 

(结果是前导零,因为UTF-32总是4字节)

您也可以使用BitConverter.ToString(byte[]) https://msdn.microsoft.com/en-us/library/3a733s97 BitConverter.ToString(byte[]) v= BitConverter.ToString(byte[])而不是for循环,而不是看起来像:

 var x = char.ConvertFromUtf32(0x1F642); var enc = new UTF32Encoding(true, false); var bytes = enc.GetBytes(x); var o = BitConverter.ToString(bytes); //result is 00-01-F6-42 

请注意, Encoding.Unicode是UTF-16。 要读取32位Unicode,有这个Encoding.UTF32 。 MSDN上用于编码的链接.UT F32