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


Posted in Javascript onDecember 27, 2006

如题,刚才看了几篇大家的讨论,忽然也想起要将自己最近研究的问题贴出来,凡是和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 相关文章推荐
FCK调用方法..
Dec 21 Javascript
TopList标签和JavaScript结合两例
Aug 12 Javascript
jQuery 添加/移除CSS类实现代码
Feb 11 Javascript
JavaScript修改css样式style动态改变元素样式
Dec 16 Javascript
jQuery取id有.的值的方法
May 21 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
Dec 02 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
Sep 17 Javascript
Vue实现双向数据绑定
May 03 Javascript
浅谈react.js中实现tab吸顶效果的问题
Sep 06 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
Aug 26 Javascript
JavaScript实现轮播图特效
Apr 10 Javascript
vue3获取当前路由地址
Feb 18 Vue.js
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
Dec 27 #Javascript
从javascript语言本身谈项目实战
Dec 27 #Javascript
JavaScript实现禁止后退的方法
Dec 27 #Javascript
utf8的编码算法 转载
Dec 27 #Javascript
ie和firefox中img对象区别的困惑
Dec 27 #Javascript
使用javascript访问XML数据的实例
Dec 27 #Javascript
URL编码转换,escape() encodeURI() encodeURIComponent()
Dec 27 #Javascript
You might like
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
jQuery pagination分页示例详解
2018/10/23 jQuery
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
python对XML文件的操作实现代码
2020/03/27 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
python全栈开发语法总结
2020/11/22 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
课程设计心得体会
2013/12/28 职场文书
员工评语大全
2014/01/19 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
部门活动策划方案
2014/08/16 职场文书
服务员岗位职责范本
2015/04/09 职场文书
总结Python连接CS2000的详细步骤
2021/06/23 Python
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技