转义的 html 不会取消转义(现在:未转义的 html 不会转义回来)

所以我目前正在使用commons lang apache库。

当我尝试取消转义此字符串时:这将返回相同的字符串:😀😀

String characters = "😀"
StringEscapeUtils.unescapeHtml(characters);

输出:😀

但是当我尝试用更少的字符来解开字符串的转义时,它的工作原理是:

String characters = "㈳"
StringEscapeUtils.unescapeHtml(characters);

输出: (社)

有什么想法吗?当我尝试在在线解转实用程序上解开这个字符串时,它有效,所以也许它是apache common langs库中的一个错误?或者任何人都可以推荐另一个图书馆吗?"😀"

谢谢。

更新:

我现在能够成功地解开字符串。现在的问题是,当我试图逃避这种不外景的结果时,它不会带回字符串(


答案 1

unescapeHtml()没有受到影响,因为 - 正如文档所说 - 它只取消了HTML 4.0实体,这些实体限制为65,536个字符。不幸的是,128,512远远超出了这一限制。😀

你试过使用吗?unescapeXml()

XML 最多支持 1,114,111 (10FFFFh) 个字符实体(链接)。


答案 2

这是一个 unicode 字符,其索引为 - GRINNING FACEU+1F600 (128512)

有关详细信息,请参阅网址

您提到的字符串是U + 1F600的HTML Escape,如果您使用Apache commons lang取消它,它将按照屏幕截图中提供的方式绘制所需的笑脸。

从 U+0000 到 U+FFFF 的字符集有时称为基本多语言平面 (BMP)。代码点大于 U+FFFF 的字符称为增补字符。Java 平台在 char 数组以及 String 和 StringBuffer 类中使用 UTF-16 表示形式。在此表示形式中,增补字符表示为一对 char 值,第一个来自高代理项范围 (\uD800-\uDBFF),第二个来自低代理项范围 (\uDC00-\uDFFF)。

关于您的更新,它没有转换回