完美解决JS中汉字显示乱码问题(已解决)

 更新时间:2006年12月27日 00:00:00   作者:  
如题,刚才看了几篇大家的讨论,忽然也想起要将自己最近研究的问题贴出来,凡是和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"> 
self.onerror=null; 
var Http = new ActiveXObject("Microsoft.XMLHTTP"; 
Http.open("GET",URL,false);      //URL是您需要获取的页面的网址 
Http.send(); 
document.write(Http.responseText); 
</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 
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(bytes2BSTR(Http.responseBody)) 
</SCRIPT> 
注:上面的bytes2BSTR只能对responseBody操作阿,responseText操作就不能正常显示阿,因为responseText是系统按默认编码加工以后的东东了,是一堆乱码,没法处理。但是这样倒是能读简体中文的文件了,但是读utf-8又会出错。
JS运行时汉字乱码相关问题的讨论(编辑中出现的问题请参考其他专题贴)

首先感谢斑竹得指教,这个页面不错,收藏了,具体内容研习中
http://sheneyan.com/test/testAjaxPost.htm

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

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

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

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

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

斑竹给得页面页能打开了,我对Ajax和xml都还比较陌生,虽然有听说,但一直没有介入,可否简单介绍下,如果论坛上不方便说,可以加我QQ,资料中有,谢谢了!

相关文章

  • JavaScript匿名函数与委托使用示例

    JavaScript匿名函数与委托使用示例

    本例主要介绍了JavaScript匿名函数与委托的使用,需要的朋友可以参考下
    2014-07-07
  • js中的鼠标事件有哪些(用法示例学习进阶)

    js中的鼠标事件有哪些(用法示例学习进阶)

    在JavaScript中,鼠标事件是 Web 开发中最常用的事件类型。鼠标点击事件包括 4 个:click(单击)、dblclick(双击)、mousedown(按下)和 mouseup(松开)。其中 click 事件类型比较常用,而 mousedown和mouseup事件类型多用在鼠标拖放、拉伸操作中。
    2023-02-02
  • Javascript WebSocket使用实例介绍(简明入门教程)

    Javascript WebSocket使用实例介绍(简明入门教程)

    网络套接字是下一代WEB应用程序双向通信技术,它是基于一个独立的socket并且需要客户端浏览器支持HTML5
    2014-04-04
  • html超链接打开窗口大小的方法

    html超链接打开窗口大小的方法

    html超链接打开窗口大小的方法,需要的朋友可以参考一下
    2013-03-03
  • 在JavaScript应用中实现延迟加载的方法

    在JavaScript应用中实现延迟加载的方法

    这篇文章主要介绍了在JavaScript应用中实现延迟加载的方法,利用RequireJS框架,需要的朋友可以参考下
    2015-06-06
  • 深入理解JavaScript 箭头函数

    深入理解JavaScript 箭头函数

    ES6标准新增了一种新的函数:Arrow Function(箭头函数)。为什么叫Arrow Function?因为它的定义用的就是一个箭头。下面我们来一起学习一下吧
    2019-05-05
  • JavaScript的字符串方法汇总

    JavaScript的字符串方法汇总

    字符串的操作在js中非常频繁,也非常重要。以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊。。。今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温习查阅。
    2016-07-07
  • 微信小程序访问node.js接口服务器搭建教程

    微信小程序访问node.js接口服务器搭建教程

    这篇文章主要给大家分享了微信小程序访问node.js接口服务器的搭建教程,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来跟着小编一起看看吧。
    2017-04-04
  • ajax上传时参数提交不更新等相关问题

    ajax上传时参数提交不更新等相关问题

    我感觉好像这个上传插件只在第一次点击的时候实例化并将参数传给后台,所以以后值都是不变的,应该怎么解决这个问题呢
    2012-12-12
  • javascript的几种写法总结

    javascript的几种写法总结

    下面小编就为大家带来一篇javascript的几种写法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09

最新评论