首頁 >web前端 >js教程 >完美解决JS中汉字显示乱码问题(已解决)_基础知识

完美解决JS中汉字显示乱码问题(已解决)_基础知识

PHP中文网
PHP中文网原創
2017-04-01 16:42:401685瀏覽

如题,刚才看了几篇大家的讨论,忽然也想起要将自己最近研究的问题贴出来,凡是和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一碰上中文就变得很不稳定=_=&#39;  
//Dec. 29th 2005 created by shouhaimu(QQ:30836570)  
function myjs(i)  
{  
    var t="<html>\n";  
    t+="<head>\n";  
    t+="<meta http-equiv=&#39;Content-Type&#39; content=&#39;text/html; charset=gb2312&#39;>\n";  
    t+="<script language=&#39;JavaScript&#39; src=&#39;1.js&#39;></script>\n";  
    t+="</head>\n";  
    t+="<body>\n";  
    t+="<input type=button 
onclick
=myjs("+(i+1)+" value=&#39;这是演示程序,已经运行了"+i+"次!&#39;>\n";  
//上面这行如果改成下面这句就可以正常显示,看来确实是JS对汉字的支持不够好:  
//t+="<input type=button onclick=myjs("+(i+1)+" value=&#39;This is my code,it has run "+i+" 
time
s!&#39;>\n";  
    t+="</body>\n";  
    t+="</html>\n";  
    
document
.open();  
    document.write(t);  
    document.close();  
}

运行第2次以上就会有乱码。
场景二:通过XMLHTTP获取文件后再输出时,如果该文件包含中文信息并按gb编码,显示时中文信息会是乱码。
js代码如下:(注释是发贴子时候加的,如果怕干扰可以去掉)

代码如下:

<SCRIPT language="JavaScript" type="text/JavaScript">  
self.onerror=
null
;  
var Http = 
new
 ActiveX
Object
("Microsoft.XMLHTTP";  
Http.open("GET",URL,false);      //URL是您需要获取的页面的网址  
Http.s
end
();  
document.write(Http.responseText);  
</SCRIPT>  
后来用VBS解决,改成如下:  
<SCRIPT language="
VBScript
" type="text/VBScript">  
Function bytes2BSTR(vIn)  
str
Return
 = ""  
For
 i = 1 To LenB(vIn)  
ThisCharCode = AscB(MidB(vIn,i,1))  
If
 ThisCharCode < &H80 Then  
strReturn = strReturn & 
Chr
(ThisCharCode)  
Else
  
Next
CharCode = 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(bytes2BSTR(Http.responseBody))  
</SCRIPT>

注:上面的bytes2BSTR只能对responseBody操作阿,responseText操作就不能正常显示阿,因为responseText是系统按默认编码加工以后的东东了,是一堆乱码,没法处理。但是这样倒是能读简体中文的文件了,但是读utf-8又会出错。
JS运行时汉字乱码相关问题的讨论(编辑中出现的问题请参考其他专题贴)

有些我也听说过,也做过测试,关键还有三个疑团没有解开:

一、即使是曾经正常显示的页面,如果用了后退或者读取了一个非utf-8页面以后也不能正常显示了;

二、即使所有的防乱码(当然重新编码的除外)措施都采用了,并且用同一程序打开铜一个页面,也不能保证每次出来的页面都能稳定地显示为中文;

三、远程获取数据提交表单的问题,如果目标网站用了编码和解码,那么意味着如果显示的正常了,提交的内容就成了乱码,反之,亦然。于是不得不预先对所有获取的内容重新编码,这样就离不开编码程序,也就摆脱不了VBS得阴影=_='

刚才测试中还发现个问题
先前发的VBS重编码函数,如果页面太大,IE会挂掉,具体多大估计和缓存及内存大小有关系。总之,如果让我对中文支持的程度排序得话JSASP静态了,当然最稳定,所以做动态页,如果不是非得客户端运行,强烈建议用ASP生成代码。

 以上就是完美解决JS中汉字显示乱码问题(已解决)_基础知识的内容,更多相关内容请关注PHP中文网(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn