为什么document.write(' \ ud83d \ ude00')可以输出HTML格式的表情符号,这是一个UTF-8字符集?

时间:2016-07-21 08:14:39

标签: javascript unicode utf-8 interpreter emoji

这是html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>emoji</title>
</head>
<body>
    \ud83d\ude00
    <script>
        var string = '\ud83d\ude00';
        document.write(string);
        console.log(string);
    </script>
</body>
</html>

unicode&#39; \ ud83d \ ude00&#39;在body标签中不能显示为表情符号而是字符串。但是&#39; \ ud83d \ ude00&#39;可以通过document.write()和console.log()显示为表情符号,甚至认为文档字符集是UTF-8。为什么呢?

3 个答案:

答案 0 :(得分:1)

元标题中的UTF-8只是说明了如何阅读HTML响应的文本,它没有将实际的DOM文档放入某种模式来制作文档本身就是UTF-8。

至于你的字符串工作原理:JavaScript字符串是a series of UTF-16 code units。所以'\ud83d\ude00'在JavaScript级别定义了表情符号。然后使用document.write将该字符串写入文档。此时,您正在处理实时文档,而不是您所说的UTF-8源文本。

如果您想直接在表单中包含表情符号,而不是通过document.write,只需将其粘贴到文档中即可;如果您将文件保存为UTF-8(您需要,因为您已告诉浏览器您正在使用的编码),您的编辑器将为其输出相应的UTF-8序列。

答案 1 :(得分:1)

请注意这是对T.J.的补充。克劳德的答案 - 我没有50个代表,所以无法添加评论:(

您错误地在html中转义,在Javascript反斜杠( \ )中用于转义,但在HTML转义中通过添加&符号前缀来实现(&amp; )并用分号后缀(; )。

您可以使用HTML数字字符引用:

&#13;
&#13;
Content-Range
&#13;
&#13;
&#13;

here is是表情符号HTML代码的一个很好的参考。

免责声明:我与该网站没有任何关系

答案 2 :(得分:0)

最明显的原因是 <div ng-repeat=" day in excDays"> <p>{{day}}</p> </div> 在HTML测试中没有转义序列。

使用HTML entities代替它应该有效:

\ud83d\ude00