将十六进制字符串转换为相应的表情符号字符串
convert a hex string to corresponding emoji string
我正在尝试从这个字符串 "D83DDC71"
开始创建一个带有表情符号 ""
的字符串。为此,我试图在此字符串 "\uD83D\uDC71"
.
中转换上面的字符串
如果我使用此代码,它会起作用(文本框按预期显示):
textbox.Text += "\uD83D\uDC71";
但如果我使用它,它就不起作用(文本框显示确切的文本“\uD83D\uDC71”而不是单个字符):
textbox.Text += sender.Code.ToString("X").insert(4, @"\u").insert(0, @"\u");
将表情符号的十六进制表示形式转换为相应的 C# 字符串 (UTF-16) 的正确方法是什么?
你有一个包含两个十六进制形式的短裤的字符串,所以你需要先解析它们。我的示例使用 overload of 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 character escape sequences 的 字符串文字 。编译程序时,编译器会用正确的 unicode 字节替换这些转义序列。这就是为什么你不能在执行过程中只在字符前面添加 \u
来使其工作的原因。
好的。您似乎有一个字符串,它给出了字符 U+1F471 (</code>).</p> 的每个 UTF-16 代码单元的十六进制数
<p>由于 <code>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);
试试这个
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。最后它会将所有字符连接成一个字符串作为表情符号。全部在一行中。
我正在尝试从这个字符串 "D83DDC71"
开始创建一个带有表情符号 ""
的字符串。为此,我试图在此字符串 "\uD83D\uDC71"
.
如果我使用此代码,它会起作用(文本框按预期显示):
textbox.Text += "\uD83D\uDC71";
但如果我使用它,它就不起作用(文本框显示确切的文本“\uD83D\uDC71”而不是单个字符):
textbox.Text += sender.Code.ToString("X").insert(4, @"\u").insert(0, @"\u");
将表情符号的十六进制表示形式转换为相应的 C# 字符串 (UTF-16) 的正确方法是什么?
你有一个包含两个十六进制形式的短裤的字符串,所以你需要先解析它们。我的示例使用 overload of 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 character escape sequences 的 字符串文字 。编译程序时,编译器会用正确的 unicode 字节替换这些转义序列。这就是为什么你不能在执行过程中只在字符前面添加 \u
来使其工作的原因。
好的。您似乎有一个字符串,它给出了字符 U+1F471 (</code>).</p> 的每个 UTF-16 代码单元的十六进制数
<p>由于 <code>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);
试试这个
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。最后它会将所有字符连接成一个字符串作为表情符号。全部在一行中。