完美解决JS中汉字显示乱码问题(已解决)
2018-09-27 09:18
如题,刚才看了几篇大家的讨论,忽然也想起要将自己最近研究的问题贴出来,凡是和JS中乱码相关的问题都发到这里把,大家一起研究。:)
场景一:write写出来的内容是utf-8格式的,如果保存的write数据中有不是utf-8编码的中文,对write嵌套俩次以上就会有乱码。由于手头没有现成的文件,刚才临时制作了一个,这是1.htm页面的代码:
复制代码 代码如下:<html>
<head>
<metahttp-equiv=Content-Typecontent=text/html;charset=gb2312>
<scriptlanguage=JavaScriptsrc=1.js></script>
</head>
<bodyonload=myjs(1)>
</body>
</html>
这是引用的1.js文件代码,俩个文件均用简体中文保存而不是utf-8
复制代码 代码如下://这是JS递归自写过程中汉字乱码的演示程序
//不光是中文内容不行,就连注释如果是中文有时候也不行
//感觉JS一碰上中文就变得很不稳定=_=
//Dec.29th2005createdbyshouhaimu(QQ:30836570)
functionmyjs(i)
{
vart=<html>\n;
t+=<head>\n;
t+=<metahttp-equiv=Content-Typecontent=text/html;charset=gb2312>\n;
t+=<scriptlanguage=JavaScriptsrc=1.js></script>\n;
t+=</head>\n;
t+=<body>\n;
t+=<inputtype=buttononclick=myjs(+(i+1)+value=这是演示程序,已经运行了+i+次!>\n;
//上面这行如果改成下面这句就可以正常显示,看来确实是JS对汉字的支持不够好:
//t+=<inputtype=buttononclick=myjs(+(i+1)+value=Thisismycode,ithasrun+i+times!>\n;
t+=</body>\n;
t+=</html>\n;
document.open();
document.write(t);
document.close();
}运行第2次以上就会有乱码。
场景二:通过XMLHTTP获取文件后再输出时,如果该文件包含中文信息并按gb编码,显示时中文信息会是乱码。
js代码如下:(注释是发贴子时候加的,如果怕干扰可以去掉)
复制代码 代码如下:<SCRIPTlanguage=JavaScripttype=text/JavaScript>
self.onerror=null;
varHttp=newActiveXObject(Microsoft.XMLHTTP;
Http.open(GET,URL,false);//URL是您需要获取的页面的网址
Http.send();
document.write(Http.responseText);
</SCRIPT>
后来用VBS解决,改成如下:
<SCRIPTlanguage=VBScripttype=text/VBScript>
Functionbytes2BSTR(vIn)
strReturn=
Fori=1ToLenB(vIn)
ThisCharCode=AscB(MidB(vIn,i,1))
IfThisCharCode<&H80Then
strReturn=strReturn&Chr(ThisCharCode)
Else
NextCharCode=AscB(MidB(vIn,i+1,1))
strReturn=strReturn&Chr(CLng(ThisCharCode)*&H100+CInt(NextCharCode))
i=i+1
EndIf
Next
bytes2BSTR=strReturn
EndFunction
setHttp=CreateObject(Microsoft.XMLHTTP
Http.openGet,URL,false//URL是您需要获取的页面的网址
Http.send
document.write(bytes2BSTR(Http.responseBody))
</SCRIPT>注:上面的bytes2BSTR只能对responseBody操作阿,responseText操作就不能正常显示阿,因为responseText是系统按默认编码加工以后的东东了,是一堆乱码,没法处理。但是这样倒是能读简体中文的文件了,但是读utf-8又会出错。
JS运行时汉字乱码相关问题的讨论(编辑中出现的问题请参考其他专题贴)
首先感谢斑竹得指教,这个页面不错,收藏了,具体内容研习中
有些我也听说过,也做过测试,关键还有三个疑团没有解开:
一、即使是曾经正常显示的页面,如果用了后退或者读取了一个非utf-8页面以后也不能正常显示了;
二、即使所有的防乱码(当然重新编码的除外)措施都采用了,并且用同一程序打开铜一个页面,也不能保证每次出来的页面都能稳定地显示为中文;
三、远程获取数据提交表单的问题,如果目标网站用了编码和解码,那么意味着如果显示的正常了,提交的内容就成了乱码,反之,亦然。于是不得不预先对所有获取的内容重新编码,这样就离不开编码程序,也就摆脱不了VBS得阴影=_=
刚才测试中还发现个问题
先前发的VBS重编码函数,如果页面太大,IE会挂掉,具体多大估计和缓存及内存大小有关系。总之,如果让我对中文支持的程度排序得话JS<VBS<ASP<HTML,HTML都静态了,当然最稳定,所以做动态页,如果不是非得客户端运行,强烈建议用ASP生成代码。
斑竹给得页面页能打开了,我对Ajax和xml都还比较陌生,虽然有听说,但一直没有介入,可否简单介绍下,如果论坛上不方便说,可以加我QQ,资料中有,谢谢了!