【问题标题】:Javascript: Invalid Unicode escape sequence while storing accessing unicodeJavascript:存储访问 unicode 时 Unicode 转义序列无效
【发布时间】:2016-09-03 09:26:31
【问题描述】:

我在SELECT 框中设置Fontawesome 图标代码并访问change 事件。访问时出现错误:

Invalid Unicode escape sequence

代码如下:

HTML

<select name="faicons" id="faicons" class="form-control selectpicker">
    <option value="0">Select</option>
    <option value="uF26E" class="fa fa-500px"> 500px</option>
    <option value="uF26E" class="fa fa-linkedin"> LinkedIn</option>
</select>

Javascript

function renderIcon(code) {
    var context = null;
    code = "F26E"
    var icon_code = "\u"+code;
    context = main_canvas.getContext('2d');
    context.font='32px FontAwesome';
    context.fillText(icon_code,20,75);
    context.fillText("My TEXT!", 140, 90);
}

【问题讨论】:

  • \u 本身不是有效的 Unicode。它是一个notation,而不是一个function。就像"\"+"t" 不会打印标签一样。
  • 充其量你正在寻找JSON.parse('"\\u'+code.toString(16).pad(4)+'"')

标签: javascript unicode


【解决方案1】:

Unicode 转义序列只有在它们完全包含在单个字符串文字中时才会被识别。连接转义序列的部分将不起作用。要从代码点动态创建字符串,请尝试String.fromCodePoint。这个函数将代码点作为一个数字,而不是一个字符串。

// works
console.log("\u0041");

// doesn't work
try {
  eval('console.log("\\u" + "0041");');
}
catch (e) {
  console.log(e.message);
}

// works, but takes a number
console.log(String.fromCodePoint(0x0041));

// works, but not recommended
console.log(eval("'\\u" + "0041" + "'"));

// works with a string
console.log(String.fromCodePoint(parseInt("0041", 16)));

【讨论】:

  • 感谢回复,好的,我试试eval.. 对于变量中的动态 unicode 设置,您有什么建议?
  • 如果你有十六进制字符串中的代码点,试试String.fromCodePoint(parseInt(code, 16))(见编辑)。
猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多