我总是到处使用UTF-8。但我偶然发现了一个奇怪的问题。
这是一个最小的示例html文件:
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function Foo()
{
var eacute_utf8 = "\xC3\xA9";
var eacute_ansi = "\xE9";
document.getElementById("bla1").value = eacute_utf8;
document.getElementById("bla2").value = eacute_ansi;
}
</script>
</head>
<body onload="Foo()">
<input type="text" id="bla1">
<input type="text" id="bla2">
</body>
</html>
html包含一个utf-8字符集标题,因此页面使用utf-8编码。因此我希望第一个字段包含'é'(急性)字符,第二个字段包含' '字样,因为单个E9字节不是有效的utf-8编码字符串。
然而,令我惊讶的是,第一个包含'é'(好像utf-8数据被解释为一些ansi变体,可能是iso-8859-1或windows-1252),第二个包含实际' é'char。这是为什么!?
请注意,我的问题与我的文本编辑器使用的特定编码无关 - 这正是我使用显式\ x字符结构的原因。它们包含ansi和utf-8编码中此字符的正确二进制表示(以ascii兼容表示法)。
假设我想在utf-8编码中插入'''字符,即unicode U + 0119或0xC4 0x99,并且在iso-8859-1或windows-1252或latin1中不存在。怎么会这样呢?
答案 0 :(得分:2)
JavaScript字符串始终是Unicode字符的字符串,绝不是字节。编码标头或元标记不会影响转义序列的解释。 \x
转义不指定字节,而是单个Unicode字符的简写。因此,行为是预期的。 \xC3
相当于\u00C3
。