用UTF-8保存的网页出现Unterminated string constant 脚本错误
我在EditPlus新建一个网页文件, 在其中只写下代码
<script>
alert("黄");
</script>
然后在浏览器中预览,结果出现运行时脚本错误
A Runtime Error has occured. Line: 1 |
顿时纳闷,如此简单的语何来这么严重的脚本错误,以前可没碰到过这种问题
怀疑script版本问题,于是
把 <script> 改为 <script language="javascript1.1"> 或 <script language="javascript1.2"> 或 <script language="jscript"> 都无济
于事。
把 alert("黄") 改为 alert(1) 没问题啊
把 alert("黄") 改为 alert(''黄'') 故障依旧
把 alert("黄") 写为 alert("黄莺") 信息倒是能弹出来,只是显示的不是我想要的结果,显示如下:
又压了下来,隔一日在网上查了 "Unterminated string constant" 并未找到问题之所在。
今天想起来了,又来作个实验,直接在桌面新建一个文本文件a.txt,改扩展名为html,用记事本打开来编辑,加上前面的代码,保存存然后在浏
览器中打开,一切正常。
慢慢地,意识到又字符集在作怪,用EditPlus把那个没问题的a.html打开,发现它是用默认的ANSI字符集保存的,另存为 UTF-8 字符集,预览
一下,故障重现,终于逮到原由了。于是乎想起了我先前把EditPlus的默认字符集改成了UTF-8了,所以只要用ANSI或者GBK/GB2312保存网页文
件就不会出现这种问题的。
忽又想,做过的很多项目中都用UTF-8字符集来保存网页文件中,难道就不能出现像上面弹出一个汉字的alert()语句吗,那不可能。
再回到那个用UTF-8字符集保存下来的有问题的网页文件,在浏览器中打开,当出现Unterminated string constant错误时忽略掉它,从右键里
选择编码为UTF-8,当前页面会刷新,并且执行结果也正常。网页中默认编码是GB2312,浏览UTF-8保存的文件是有问题的。所以结论是,如果你用UTF-8字符集保存的网页文件,必须事先告诉浏览器准备用相同的编码来打开,需要做的事情就是在网页前边加上
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
有了那个不管你的网页文件用什么字符集保存,脚本错误是不会出现了,只是乱码问题。
由此可知浏览器对文件的读取和显示也有一个字符集问题,读取所用字符集是依据文件本身的字符集,显示时编码若没有显式指定就由浏览器中设置的语言而定。