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

时间:2017-06-23 19:32:24

标签: c# wpf unicode emoji emoticons

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

在WPF上,我的黑色表情看起来像this。我以某种方式得到了一个表情符号图标库,它们以相应的十六进制/转义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);

任何帮助表示赞赏!!

2 个答案:

答案 0 :(得分:3)

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

string unicodeString = "\u1F642";  // represents  

这段代码并不代表微笑的面孔"因为C#只尊重前4个字符 - 代表UTF-16(带2个字节)。

所以你实际得到的是代表1F64的字母后跟一个简单的2brunowego

所以:ὤ2

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

var unicodeString = char.ConvertFromUtf32(0x1F642);

http://www.fileformat.info/info/unicode/char/1f64/index.htm

或者你可以这样写:

\uD83D\uDE42

这个字符串可以这样解析,以获得你想要的结果,这又是我们开始使用的十六进制值:

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/system.char.convertfromutf32(v=vs.110).aspx结果而不是for循环,而不是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

答案 1 :(得分:0)

请注意,Encoding.Unicode在C#中是UTF-16。要读取32位Unicode,有Encoding.UTF32Link on MSDN for Encoding.​UT​F32