1 回答
TA贡献1784条经验 获得超9个赞
几个问题:
您有一个“八进制值”,但仅在
parseInt
. 您需要使用 base 8 来解析八进制数。您的输入字符串中没有反斜杠。
"\3"
与 完全相同"3"
,因为您实际上是在转义“3”(这不是必需的)。如果您想要文字反斜杠,则需要转义反斜杠:"\\"
。尽管您创建了用于匹配输入中的八进制数的正则表达式 (as
r3
),但您从不使用该正则表达式。
其他备注:
当输入参数为空时,您返回一个字符串,但在另一种情况下,您的函数不返回任何内容。它只是输出它。您应该返回字符串。
如果参数是
undefined
then== null
也将是true
,因此不需要条件中的||
表达式if
。不要使用
document.write
.innerHTML
分配给DOM 元素的属性几乎总是更好。obj1
当实际上期望它具有字符串数据类型时,不要命名您的变量。
function decodeUnicodeChar(str) {
if (str == null) return ""; // no need extra test on undefined
var r = /\\u([\d\w]{4})/gi;
var r3 = /\\([\d\w]{3})/gi;
str = str.replace(r, (match, grp) => String.fromCharCode(parseInt(grp, 16)))
.replace(r3, (match, grp) => String.fromCharCode(parseInt(grp, 8)))
.replace(/\n/g, "<br>");
return decodeURIComponent(str); // return it
}
console.log(decodeUnicodeChar("Hello \\361o")); // escape backslash
最后,我建议使用 JSON 格式的字符串,它允许对 unicode 字符进行编码。然后你只需要打电话JSON.parse
。
添加回答
举报