如何在JavaScript中将Unicode字符转换为符号/特殊字符
问题分析与解决方案
核心问题
你写的正则表达式是用来匹配HTML实体编码(如(),但你的字符串中是JS的Unicode转义序列(如\u0028),两者格式完全不同,导致正则匹配失败,替换无效。
另外需要注意:如果你的字符串是直接写的'Hello \u0028 Hi \u0029',在JS执行时,\u0028会被自动解析为左括号(,\u0029解析为右括号),此时字符串本身已经是你想要的结果,不需要额外转换。
正确解决方案
如果你的字符串实际包含字面量的\u0028(比如从后端获取的字符串是"Hello \\u0028 Hi \\u0029"),可以用以下代码处理:
<!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <script> // 用转义反斜杠确保字符串中是字面量的\u0028 var str = 'Hello \\u0028 Hi \\u0029'; var res = str.replace(/\\u([0-9a-fA-F]{4})/g, function(match, hexStr) { var num = parseInt(hexStr, 16); // 将十六进制转为十进制 return String.fromCharCode(num); }); console.log(res); // 输出:Hello ( Hi ) </script> <h1>This is a Heading</h1> <p>This is a paragraph.</p> </body> </html>
代码说明
- 正则
/\\u([0-9a-fA-F]{4})/g:匹配字符串中字面量的\u开头,后跟4位十六进制数字的序列 - 回调函数中,将捕获到的十六进制字符串转为十进制数字,再用
String.fromCharCode()转换为对应字符
内容的提问来源于stack exchange,提问作者anguler-developer
相关产品推荐
相关产品推荐

