html 表情转换,转换UTF16中的“HTML实体”表情符号代码(在C++中)

编程入门 行业动态 更新时间:2024-10-09 15:25:15

html 表情转换,转换UTF16中的“HTML实体”<a href=https://www.elefans.com/category/jswz/34/1745227.html style=表情符号代码(在C++中)"/>

html 表情转换,转换UTF16中的“HTML实体”表情符号代码(在C++中)

例如,unicode字符0x3DD8 0x00DE在文本中发现将被替换通过笑脸图像

字符U + 1F600笑脸由UTF-16代码单元序列0xD83D,0xDE00表示。

(Graphemica交换用于每个码单元中的字节的顺序是超级误导;忽略。)

我发现,这些代码是另一个标准的一部分,并且实际上是一个命名的一组项的“HTML实体”,显然用于网络开发

HTML与它无关。它们是普通的Unicode字符,只是在U + FFFF之上的基本多语言平面以外的字符,这就是为什么它需要多个UTF-16代码单元来表示它们。

HTML数字字符引用(如😀)(通常不正确地称为实体)是通过代码点编号引用字符的一种方式,但转义字符串仅在HTML(或XML)文档中有效,而我们不在其中之一。

所以:

我需要的0x1f600 HTML实体代码转换为0x3DD8 0x00DE UTF16代码。

听起来更像:

我需要转换U + 1F600笑嘻嘻工作面的表示:从所述码点数目0x1F600为UTF-16编码单元序列0xD83D,0xDE00

其中在C#将是: ​​

或在另一个方向:

int codepoint = Char.ConvertToUtf32("\uD83D\uDE00", 0); // 0x1F619

('UTF-32'这个名字在这里的选择很差;我们正在谈论一个整数代码点数,而不是每个字符四字节的序列。)

或者是否有一个已知的技巧来做到这一点? (例如“字符+('a' - 'A')”将大写字符转换为较低)

在C++中,事情更令人讨厌;没有(我能想到的)任何直接在代码点和UTF-16代码单元之间转换的东西。您可以使用各种编码函数/库在UTF-32编码的字节序列和UTF-16编码单元之间进行转换,但最终可能比您自己编写conversion logic更加虚拟。例如在用于单个字符最基本的形式:

std::wstring fromCodePoint(int codePoint) {

if (codePoint < 0x10000) {

return std::wstring(1, (wchar_t)codePoint);

}

wchar_t codeUnits[2] = {

0xD800 + ((codePoint - 0x10000) >> 10),

0xDC00 + ((codePoint - 0x10000) & 0x3FF)

};

return std::wstring(codeUnits, 2);

}

这是假设该wchar_t类型基于UTF-16代码单元,相同的C#string类型是什么。在Windows上,这可能是真的。在其他地方,它可能不是,但在wchar_t基于代码点的平台上,您可以将每个代码点作为字符从字符串中提取出来,而无需进一步处理。

(优化和错误处理作为练习留给读者。)

更多推荐

html 表情转换,转换UTF16中的“HTML实体”表情符号代码(在C++中)

本文发布于:2024-02-05 11:55:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745304.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:表情符号   实体   表情   代码   html

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!