JavaScript 无法正确读取 ASCII 大于 128 的字符。

4
我有一个包含Javascript文件的HTML。这个脚本包含一个特殊字符,ASCII 152。当我尝试显示charCodeAt时,我得到不同的结果,但从未得到正确的结果。你能给予建议吗?谢谢。

TEST.HTML

<script type="text/javascript" charset=SEE BELOW src="test.js">
</script>

使用 ANSI 编码的 TEST.JS 文件

function d(a)
{
a=(a+"").split("");
alert(a[1].charCodeAt(0));
};
d("i˜g"); // Note that ˜ is 152 in ASCII
  • 使用x-user-defined字符集的TEST.HTML:警告显示63384。 %63232有效,因为每个字符>128都会显示为63232+char。
  • 使用UTF-8字符集的TEST.HTML:警告显示65533。所有> 128的字符都将显示为65533。
  • 使用Windows-1252字符集的TEST.HTML:警告显示752。我找不到ASCII和所显示内容之间的关系。

使用UTF-8编码的TEST.JS文件

function d(a)
{
a=(a+"").split("");
alert(a[1].charCodeAt(0));
};
d("i[x98]g"); // Note that x98 is 152
  • 使用x-user-defined字符集的TEST.HTML文件:警告显示65533。所有大于128的字符都会显示为65533。
  • 使用UTF-8字符集的TEST.HTML文件:警告显示65533。所有大于128的字符都会显示为65533。
  • 使用Windows-1252字符集的TEST.HTML文件:警告显示65533。所有大于128的字符都会显示为65533。

2
在 utf8 中,127-255 范围内没有字符,而 ASCII 在 127 结束。此外,“i[x98]g”中位置为 1 的字符是“[`”。 - Esailija
“˜” 在我所知的任何编码中都不在第152个位置。 - deceze
2个回答

6

在utf8编码中,128-255范围内没有字符,ASCII编码在127结束。此外,"i[x98]g"中位置为1的字符是一个"[""[x98]"是无意义的。

你的函数可以被替换为str.charCodeAt(1)

字符˜Unicode字符'SMALL TILDE' (U+02DC),可写成"\u02DC"String.fromCharCode(732)


1
额外信息:charCodeAt() 可以使用 Unicode,对 ASCII 并不关心。 - Álvaro González
抱歉,我指的是ASCII扩展字符集。根据下面的内容,152是'˜'。 http://www.ascii-code.com/[x98]是一个字符。这是Notepad++在UTF-8中表示该152字符的方式。十六进制中的98是152。 - user411103
谢谢大家。我重新表达我的问题。我想要在TEST.JS中写一个代表整数152的字符作为d()的参数,以便当我运行这个函数时,alert会显示152。我可以使用任何编码。 - user411103
1
@Arturo,如果是这种情况,你可以写成 "\u0098",或者使用这个不可见字符:"",或者 String.fromCharCode(152) - Esailija
我相信字符152(\u0098)和732(\u02dc)之间存在某种问题,因为它们都显示为相同的符号。我该如何强制charCodeAt()使用正确的一个(152)? http://www.fileformat.info/info/unicode/char/2dc/index.htm http://www.fileformat.info/info/unicode/char/098/index.htm - user411103
显示剩余2条评论

0

ASCII 只有 127 个字符。字符 152 不存在。


1
抱歉,我指的是ASCII扩展字符集。根据下面的内容,152是“˜”。http://www.ascii-code.com/ - user411103

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接