将十六进制字符串转换为相应的表情符号字符串
本文关键字:字符串 符号 十六进制 转换 | 更新日期: 2023-09-27 18:01:28
我试图创建一个表情符号" "
从这个字符串"D83DDC71"
开始的字符串。为了做到这一点,我试图将上面的字符串转换为这个字符串"'uD83D'uDC71"
。
如果我使用这个代码它工作(文本框显示 如预期):
textbox.Text += "'uD83D'uDC71";
但如果我使用这个,它不起作用(文本框显示确切的文本"'uD83D'uDC71"而不是单个字符):
textbox.Text += sender.Code.ToString("X").insert(4, @"'u").insert(0, @"'u");
将表情符号的十六进制表示转换为相应的c#字符串(UTF-16)的正确方法是什么?
好的。似乎你有一个字符串,它给出了字符U+1F471 (
)的每个UTF-16代码单元的十六进制。
由于char
表示UTF-16代码单元,将字符串分成两个4个字符的块,将其解析为十六进制int,将每个转换为char
,然后将它们组合成字符串:
var personWithBlondHair = ""
+ (char)int.Parse("D83DDC71".Substring(0, 4), NumberStyles.HexNumber)
+ (char)int.Parse("D83DDC71".Substring(4, 4), NumberStyles.HexNumber);
按照https://dotnetfiddle.net/oTgXfG
您有一个包含两个十六进制形式的短裤的字符串,因此您需要首先对它们进行解析。我的例子使用了Convert.ToInt16
的重载,它也接受一个整数,指定字符串中整数的基数,在我们的例子中是16(十六进制)。
string ParseUnicodeHex(string hex)
{
var sb = new StringBuilder();
for (int i = 0; i < hex.Length; i+=4)
{
string temp = hex.Substring(i, 4);
char character = (char)Convert.ToInt16(temp, 16);
sb.Append(character);
}
return sb.ToString();
}
请注意,如果字符串的长度不能被4整除,此方法将失败。
原因:
textbox.Text += "'uD83D'uDC71";
是因为您有一个包含unicode字符转义序列的字符串字面值。在编译程序时,编译器会用正确的unicode字节替换这些转义序列。这就是为什么您不能在执行过程中在字符前面添加'u
以使其工作的原因。
试试这个
string str = "D83DDC71";
string emoji = string.Join("", (from Match m in Regex.Matches(str, @"'S{4}")
select (char) int.Parse(m.Value, NumberStyles.HexNumber)).ToArray());
这将把字符串4 × 4分隔成字符串数组。然后它会将每个字符串转换为char。最后,它会将所有字符连接成一个字符串作为表情符号。