我正在尝试将表情符号转换为十六进制数字或字符串。
有任何方法可以将此转换为:0x00000000D83DDC71L或D83DDC71
修改
我的代码是:
var bytes = Encoding.UTF8.GetBytes(emoji.ToString()); //emoji is
var number = BitConverter.ToUInt32(bytes, 0); //number is 2610470896
var emojiCode = unicode.ToString("X"); // emojiCode is 9B989FF0
问题是我需要我的emojiCode为D83DDC71
我希望现在更清楚了。
答案 0 :(得分:2)
您必须执行以下操作:
var str = "\uD83D\uDC71";
string res = BitConverter.ToString(Encoding.BigEndianUnicode.GetBytes(str)).Replace("-", "");
请注意,您希望Unicode字符串处于“大端”模式(因此Encoding.BigEndianUnicode
)
如果不经过Encoding
转换,可能会更轻松:
string res = string.Concat(str.Select(x => ((ushort)x).ToString("X4")));
(ushort
和char
几乎相同,但ushort
构建为格式化为数字,而char
构建为格式化为字符)
答案 1 :(得分:0)
Emoji Unicode不是单个十六进制数字,它只能通过UTF32进行编码。 因此您可以像这样分割它:
byte[] utfBytes = System.Text.Encoding.UTF32.GetBytes("?");
print(utfBytes.Length);
for (int i = 0; i < utfBytes.Length; i += 4)
{
if (i != 0) result += '-';
result += System.BitConverter.ToInt32(utfBytes, i).ToString("x2").ToUpper();
}