在 nashorn 中将 html 解码后的字符串转换为人类可读的字符串

Convert html decoded string to human readable string in nashorn

我有一些这样的字符串(编码为 utf-8):

توسعه.

我想将它们转换为:

توسعه

我如何在 java脚本中做到这一点?

该解决方案需要与 nashorn 兼容,因为我 运行 [中的虚拟引擎中的代码=37=]。

注意: None 这些 HTML Entity Decode, Unescape HTML entities in Javascript? 对于我的问题是可以接受的,因为它们在 nashorn 中不起作用。

P.S:我已经搜索了可能的解决方案,许多人建议使用 decodeURIComponent(escape(window.atob(yourString)))(略有不同),这显然不起作用,因为我在 vscode(java脚本).

不清楚 nashorn 是否支持 DOM 方法,但通常你可以做到

var x = 'توسعه'
var y = document.createElement("div")
y.innerHTML = x;
console.log(y.textContent)

我在问题中提到的字符串可以分解为由;分隔的更小的部分。每个部分都是 &# 和对应字符 (Ê) 的十六进制数(例如 x62A)的组合。

以下代码将通过解析输入 str 并找到相应的字符来完成这项工作。结果是字符的串联。

human_readable = function (str) {
            hex_code = str.match(/([^&#]+[\w][^;])|(\s)/g)
            s = ''
            for (j = 0; j < hex_code.length; j++) {
                if (hex_code[j] != ' ') {
                    int_code = parseInt("0" + hex_code[j])
                    char = String.fromCharCode(int_code)
                } else {
                char = ' '
                }
                s = s + char
                }
            return s
        }

console.log(human_readable('&#x62A;&#x648;&#x633;&#x639;&#x647;'))

P.S:我假设如果 str 包含空格,它将只是 ' ',而不是相应的 unicode。