如何将表情符号转换为其 UTF-32/escaped unicode?
How to convert emoticons to its UTF-32/escaped unicode?
我正在 WPF 中开发一个聊天应用程序,我想在其中使用表情符号。我正在开发 WPF 应用程序。我想阅读来自 Android/iOS 设备的表情符号并显示相应的图像。
在 WPF 上,我得到一个看起来像 的黑色表情符号。我以某种方式得到了一个表情符号图标库,这些图标以各自的 hex/escaped unicode 值保存。
所以,我想把这些表情符号转换成UTF-32/escaped 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);
感谢任何帮助!!
请注意,Encoding.Unicode
在 C# 中是 UTF-16。要读取 32 位 Unicode,有这个 Encoding.UTF32
。 Link on MSDN for Encoding.UTF32
您转义的 Unicode 字符串在 C# 中无效。
string unicodeString = "\u1F642"; // represents
这段代码不代表 "slightly smiling face" 因为 C# 只考虑前 4 个字符 - 代表 UTF-16(2 个字节)。
所以你实际得到的是代表 1F64
的字母后跟一个简单的 2
。
http://www.fileformat.info/info/unicode/char/1f64/index.htm
所以这样:ὤ2
如果你想输入 4 字节的十六进制并得到相应的字符串,你必须使用:
var unicodeString = char.ConvertFromUtf32(0x1F642);
https://msdn.microsoft.com/en-us/library/system.char.convertfromutf32(v=vs.110).aspx
或者你可以这样写:
\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/3a733s97(v=vs.110).aspx 而不是 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
我正在 WPF 中开发一个聊天应用程序,我想在其中使用表情符号。我正在开发 WPF 应用程序。我想阅读来自 Android/iOS 设备的表情符号并显示相应的图像。
在 WPF 上,我得到一个看起来像
我曾尝试将表情符号转换为它的 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);
感谢任何帮助!!
请注意,Encoding.Unicode
在 C# 中是 UTF-16。要读取 32 位 Unicode,有这个 Encoding.UTF32
。 Link on MSDN for Encoding.UTF32
您转义的 Unicode 字符串在 C# 中无效。
string unicodeString = "\u1F642"; // represents
这段代码不代表 "slightly smiling face" 因为 C# 只考虑前 4 个字符 - 代表 UTF-16(2 个字节)。
所以你实际得到的是代表 1F64
的字母后跟一个简单的 2
。
http://www.fileformat.info/info/unicode/char/1f64/index.htm
所以这样:ὤ2
如果你想输入 4 字节的十六进制并得到相应的字符串,你必须使用:
var unicodeString = char.ConvertFromUtf32(0x1F642);
https://msdn.microsoft.com/en-us/library/system.char.convertfromutf32(v=vs.110).aspx
或者你可以这样写:
\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/3a733s97(v=vs.110).aspx 而不是 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