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

2016-02-19 11:27 64 1 收藏

下面图老师小编要跟大家分享完美解决JS中汉字显示乱码问题(已解决),简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - Web开发 】

如题,刚才看了几篇大家的讨论,忽然也想起要将自己最近研究的问题贴出来,凡是和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="htmln"; 
    t+="headn"; 
    t+="meta http-equiv='Content-Type' content='text/html; charset=gb2312'n"; 
    t+="script language='JavaScript' src='1.js'/scriptn"; 
    t+="/headn"; 
    t+="bodyn"; 
    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+="/bodyn"; 
    t+="/htmln"; 
    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会挂掉,具体多大估计和缓存及内存大小有关系。总之,如果让我对中文支持的程度排序得话JSVBSASPHTML,HTML都静态了,当然最稳定,所以做动态页,如果不是非得客户端运行,强烈建议用ASP生成代码。

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

来源:https://www.tulaoshi.com/n/20160219/1597592.html

延伸阅读
标签: word
解决word无法输入汉字问题   其实这是 word 2007 的设置问题,解决方法如下: 1. 打开一个 word 文本,选中左上角的圆圈,点击 word 选项 2. 选项打开之后,选择高级,然后把输入法处于活动状态的钩钩去掉 怎么使用word清除网页干扰乱码   1、首先打开Word 2007,然后粘贴要进行复制的文字。不要清除格式...
标签: 电脑入门
综合了网上各种观点,加上亲身实验,在本人的机子中完美解决乱码问题。 注意这几个方面: 一、就是控制面板中,系统时区、语言等的设定。这些大家都会设了,不过设了以后乱码还是有的,但这步骤还是必须的。 二、坛子中流传最广的解决方法: 打开注册表键 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFontAssocAssociated Charset ...
转自:http://www.phpchina.cn/viewarticle.php?id=1584 下面要写的是一篇非常无聊的东西,充斥了大量各式各样的编码、转换、客户端、服务器端、连接……呃,我自己都不愿意去看它,但想一想,写下来还是有点意义的,原因有四: MySQL 4.1 对多语言的支持有了很大变化 (这导致了问题的出现); 尽管大部分的地方 (包括个人使用和主机提供商)...
标签: Web开发
前几天发了篇同站点有不同编码的乱码问题,今天再说一说js调用出现乱码的问题,js调用的话,上次那个方法就不管用了,因为这都涉及不到asp的事了,属于静态页面的范畴。 一般来说js调用用这样的代码: script language="javascript" src="http://www.webjx.com/xx.js" 如果你在utf-8的页面调用gb2312的js,可以添加char...
标签: Web开发
在数据提取页面的第一行代码换成如下代码即可: % @language=vbscript codepage=936% 1.若是html文件(.htm .html) 在head/head中加上meta http-equiv="Content-Type" content="text/html; charset=gb2312" 2.若是PHP/cgi文件(.php .php3 .php4) 在每个PHP文件第一行加上?header("...

经验教程

737

收藏

11
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部