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

bxgwgixi  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(138)

我正在WPF中开发一个聊天应用程序,我想在其中使用表情符号。我正在WPF应用程序中工作。我想读取来自Android/iOS设备的表情符号并显示相应的图像。
在WPF上,我得到了一个看起来像x1c 0d1x的黑色表情符号。我不知怎么得到了一个表情符号库,这些表情符号是用各自的十六进制/转义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);

任何帮助都是感激不尽的!!

js5cn81o

js5cn81o1#

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

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

这段代码不代表“微微微笑的脸”,因为C#只考虑前4个字符-代表UTF-16(2字节)。
因此,实际上得到的是表示1F64的字母,后跟一个简单的2http://www.fileformat.info/info/unicode/char/1f64/index.htm
所以这个:ὤ2
如果您想输入hex with 4 Bytes并获取相应的字符串,则必须用途:

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

(The因为UTF-32始终为4字节,所以结果的前导为零)
除了for循环,您还可以使用BitConverter.ToString(byte[])https://msdn.microsoft.com/en-us/library/3a733s97(v=vs.110).aspx,结果如下所示:

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
zbq4xfa0

zbq4xfa02#

请注意,Encoding.Unicode在C#中是UTF-16。若要读取32位Unicode,则存在以下Encoding.UTF32. Link on MSDN for Encoding.​UT​F32

kx7yvsdv

kx7yvsdv3#

由于**C#**原始程式档可以包含UTF-32字串常值,因此这项工作不需要使用任何编码方式。

示例1.

var rgch = "\U0001F642".ToCharArray();
var str = $"\\u{(ushort)rgch[0]:X4}\\u{(ushort)rgch[1]:X4}";

结果:"\uD83D\uDE42" * 字符串str的长度为12UTF-16码位(24字节)*

示例2.

var rgch = "\U0001F642".ToCharArray();
var str = rgch[0] + "" + rgch[1];

结果:"🙂" * 字符串str的长度为2UTF-16码位(4字节)*

相关问题