完美解决JS中汉字显⽰乱码问题(已解决)
如题,刚才看了⼏篇⼤家的讨论,忽然也想起要将⾃⼰最近研究的问题贴出来,凡是和JS中乱码相关的问题都发到这⾥把,⼤家⼀起研究。:)
场景⼀:write写出来的内容是utf-8格式的,如果保存的write数据中有不是utf-8编码的中⽂,对write嵌套俩次以上就会有乱码。由于⼿头没有现成的⽂件,刚才临时制作了⼀个,这是1.htm页⾯的代码:
复制代码代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="JavaScript" src="1.js"></script>
</head>
<body onload=myjs(1)>
</body>
</html>
这是引⽤的1.js⽂件代码,俩个⽂件均⽤简体中⽂保存⽽不是utf-8
复制代码代码如下:
//这是JS递归⾃写过程中汉字乱码的演⽰程序
//不光是中⽂内容不⾏,就连注释如果是中⽂有时候也不⾏
//感觉JS⼀碰上中⽂就变得很不稳定=_='
//Dec. 29th 2005 created by shouhaimu(QQ:30836570)
function myjs(i)
{
var t="<html>\n";
t+="<head>\n";
t+="<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>\n";
t+="<script language='JavaScript' src='1.js'></script>\n";
t+="</head>\n";
t+="<body>\n";
t+="<input type=button onclick=myjs("+(i+1)+" value='这是演⽰程序,已经运⾏了"+i+"次!'>\n";
//上⾯这⾏如果改成下⾯这句就可以正常显⽰,看来确实是JS对汉字的⽀持不够好:
//t+="<input type=button onclick=myjs("+(i+1)+" value='This is my code,it has run "+i+" times!'>\n";
t+="</body>\n";
t+="</html>\n";
document.open();
document.write(t);
document.close();
}
运⾏第2次以上就会有乱码。
场景⼆:通过XMLHTTP获取⽂件后再输出时,如果该⽂件包含中⽂信息并按gb编码,显⽰时中⽂信息会是乱码。
js代码如下:(注释是发贴⼦时候加的,如果怕⼲扰可以去掉)
复制代码代码如下:
<SCRIPT language="JavaScript" type="text/JavaScript">
var Http = new ActiveXObject("Microsoft.XMLHTTP";
Http.open("GET",URL,false);      //URL是您需要获取的页⾯的⽹址
Http.send();
document.sponseText);
</SCRIPT>
后来⽤VBS解决,改成如下:
<SCRIPT language="VBScript" type="text/VBScript">
Function bytes2BSTR(vIn)
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
javascript是什么意思中文翻译NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
set Http = CreateObject("Microsoft.XMLHTTP"
Http.open "Get",URL,false   //URL是您需要获取的页⾯的⽹址
Http.send ""
document.write(sponseBody))
</SCRIPT>
注:上⾯的bytes2BSTR只能对responseBody操作阿,responseText操作就不能正常显⽰阿,因为responseText是系统按默认编码加⼯以后的东东了,是⼀堆乱码,没法处理。但是这样倒是能读简体中⽂的⽂件了,但是读utf-8⼜会出错。
JS运⾏时汉字乱码相关问题的讨论(编辑中出现的问题请参考其他专题贴)
⾸先感谢斑⽵得指教,这个页⾯不错,收藏了,具体内容研习中
sheneyan/test/testAjaxPost.htm
有些我也听说过,也做过测试,关键还有三个疑团没有解开:
⼀、即使是曾经正常显⽰的页⾯,如果⽤了后退或者读取了⼀个⾮utf-8页⾯以后也不能正常显⽰了;
⼆、即使所有的防乱码(当然重新编码的除外)措施都采⽤了,并且⽤同⼀程序打开铜⼀个页⾯,也不能保证每次出来的页⾯都能稳定地显⽰为中⽂;
三、远程获取数据提交表单的问题,如果⽬标⽹站⽤了编码和解码,那么意味着如果显⽰的正常了,提交的内容就成了乱码,反之,亦然。于是不得不预先对所有获取的内容重新编码,这样就离不开编码程序,也就摆脱不了VBS得阴影=_='
刚才测试中还发现个问题
先前发的VBS重编码函数,如果页⾯太⼤,IE会挂掉,具体多⼤估计和缓存及内存⼤⼩有关系。总之,如果让我对中⽂⽀持的程度排序得话JS<VBS<ASP<HTML,HTML都静态了,当然最稳定,所以做动态页,如果不是⾮得客户端运⾏,强烈建议⽤ASP⽣成代码。
斑⽵给得页⾯页能打开了,我对Ajax和xml都还⽐较陌⽣,虽然有听说,但⼀直没有介⼊,可否简单介绍下,如果论坛上不⽅便说,可以加我QQ,资料中有,谢谢了!