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

如题,刚才看了几篇大家的讨论,忽然也想起要将自己最近研究的问题贴出来,凡是和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,资料中有,谢谢了!

(0)

相关推荐

  • JS URL传中文参数引发的乱码问题

    解决方法如下: 1.在JS里对中文参数进行两次转码 复制代码 代码如下: var login_name = document.getElementById("loginname").value; login_name = encodeURI(login_name); login_name = encodeURI(login_name); 2.在服务器端对参数进行解码 复制代码 代码如下: String loginName = ParamUtil.getString(request, &

  • javascript alert乱码的解决方法

    javascript alert()函数就是一个用于输入提示的功能,但今天在使用alert()提示时中文乱码,拼音什么的都没有问题呀,下面我在论坛找到一解决办法,下面与大家分享.解决办法一: 复制代码 代码如下: echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';echo '<script type="text/javascript&q

  • 引用外部js乱码问题分析及解决方案

    在web开发中我们一般都会不可避免的使用js.我们可以将js代码直接放在页面中即通过内部使用js.但是为了给页面良好的"瘦身"我们一般都会将js代码放在外部,然后通过src引用.这个时候我们就需要注意一个问题:编码问题.如果web页面也js采用不同编码,这个时候就会出现乱码.(内部使用js不需要注意编码问题,因为他们采用的是同一种编码) 对于大多数的web页面,我们一般都是使用如下两种编码:UTF-8.GB2312.所以我们只需要同意页面和js编码就可以解决乱码问题: 对于GBK页面引

  • php中json_encode UTF-8中文乱码的更好解决方法

    最近在接口代码当中用到过json_encode,在网上找到说json_encode编码设置为UTF-8中文就不会乱码,经验证这办法确实是有效果的,但是不知道为什么,代码在用过一段时间之后就不太管用了.以下是自己的解决json_encode的办法.有更好的方法请分享出来吧! 第一种: 这种简单的做一个代码转换,urlcode之后再返回所需数组 我代码这样就足够了. 代码如下 复制代码 public static function encodeOperations ($array) { foreac

  • utf-8编码引起js输出中文乱码的解决办法

    编码规则是utf-8,如网页头中的: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 那么js文件中如果有中文输出就会出现乱码,解决此个问题有两个方法: 1.在引用javascript输出的地方加上charset="gb2312" 或 charset="big5"(假设输出的是Big5繁体字). 例: <script

  • url 编码 js url传参中文乱码解决方案

    1.配置文件web.config中 在节中加上整个网站的编码方式. <globalization fileEncoding="GB2312" requestEncoding="GB2312" responseEncoding="GB2312"/> 这样参数就以gb2312的中文编码方式传输了.而一般默认是utf-8. 2.在传参是先编码在传输,接受时先编码,在接收. string mm=Server.URLEncode(你); Res

  • js escape,unescape解决中文乱码问题的方法

    1.escape 方法 对 String 对象编码以便它们能在所有计算机上可读, escape(charString) 必选项 charstring 参数是要编码的任意 String 对象或文字. 说明 : escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式).所有空格.标点.重音符号以 及 其他非 ASCII字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数.例如,空格返回的是"%20 " . 字符值大于 255 的以 %u

  • 通过网页查看JS源码中汉字显示乱码的解决方法

    前言 在网页中读取js文件,中文显示正常(比如alert出js文件的中文信息).但当浏览器查看js文件源代码时,则会看到代码里的中文全是乱码.虽然不影响程序运行,但是在读js文件代码时,会受影响. 前几天在浏览器查看自己写的web代码的时候,发现外联js文件的汉字注释显示为乱码,如下图所示: 这种瑕疵对于有轻微强迫症+代码洁癖的人来说是不可容忍的 本来还以为是js文件没保存UTF-8格式,又把js文件重新保存了一遍 可惜,然并卵... 不过,最后还是被我找到原因了. 其实这个只是浏览器设置问题,

  • js url传值中文乱码之解决之道

    在websphere 中使用的是url=encodeURI(encodeURI(url)); //用了2次encodeURI 测试成功,第一次转换没有尝试, 处理方法一. js 程序代码:url=encodeURI(url);注意是整个URL 服务器端的代码:String linename = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"); 处理方法

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

    如题,刚才看了几篇大家的讨论,忽然也想起要将自己最近研究的问题贴出来,凡是和JS中乱码相关的问题都发到这里把,大家一起研究.:) 场景一:write写出来的内容是utf-8格式的,如果保存的write数据中有不是utf-8编码的中文,对write嵌套俩次以上就会有乱码.由于手头没有现成的文件,刚才临时制作了一个,这是1.htm页面的代码:  复制代码 代码如下: <html>  <head>  <meta http-equiv="Content-Type"

  • escape函数解决js中ajax传递中文出现乱码问题

    本文实例讲述了escape函数解决js中ajax传递中文出现乱码问题,分享给大家供大家参考.具体方法如下: 一.问题描述: 本来网页特效中的escape()是将中文按iso-8859-1字符集进行url编码的,那样通过 request.getparameter()是能直接获取到请求参数的,但后来的javascript将escape()换成了unicode字符集编 码,如此一来,在jsp教程和servlet中就没法直接拿到请求参数了,具体原因我也不知道. 二.解决办法: 1.首先对中文字符进行两次

  • vue.js中使用微信扫一扫解决invalid signature问题(完美解决)

    1.点击按钮,实现微信扫一扫功能: <template> <a class="btn" @click="scan">扫一扫</a> </template> 2.使用config接口注入配置信息,wx.config调用方法如下: (其中appId,timestamp,nonceStr,signature必须从后台获取,传参当前网页的URL,不包含#及其后面部分,location.href.split('#')[0]获取)

  • python解决js文件utf-8编码乱码问题(推荐)

    html文件中引入js文件,显示乱码! js文件为utf-8 编码(无bom)  ,此时只要将js文件转成utf-8 BOM编码就可以解决了 可以使用notepad++转码 也可以使用下面的python代码批量转码 # -*- coding:utf-8 -*- import os,sys import chardet def convert( filename, in_enc = "GBK", out_enc="UTF-8" ): try: print("

  • matplotlib 生成的图像中无法显示中文字符的解决方法

    前几天使用matplotlib 绘图的时候发现无法使用中文字符,所以找了个笔记,顺便分享给大家 开发环境 windows 8.1 64bit python 3.6.0 matplotlib 3.2.1 问题背景 使用 matplotlib 绘制函数图像的时候,发现设置图像名称或图例需要汉字显示的时候只能得到空格 生成图像中的中文错误效果 原因分析 python中的matplotlib仅支持Unicode编码,默认是不显示中文的. 解决方案 解决方案1 python文件中添上一段语句 plt.rc

  • 解决js中的setInterval清空定时器不管用问题

    使用场景:我在函数A中调用定时器函数,定时器是单独写的一个函数 原因:页面加载时我调用了1次函数A,然后又单独调用了一次定时器函数,导致调用了2次setInterval(),导致有setInterval_id有2个值. 通过打印定时器的值发现的问题. clearInterval()只关闭了其中一个setInterval_id,另一个setInterval_id还会启动setInterval(). 解决方法:把单独调用的定时器函数去掉. 补充知识:js vue中setTimeout无法通过clea

  • 快速解决js中window.location.href不工作的问题

    E6中在html中<a>标识中通过JS添加click事件调用一个JS函数,例如: < script type = "text/javascript" > function jump () { window . location . href = 'http://www.jb51.net' ; } function enjoy () { return false ; } < /script> html代码: <a href= "java

  • 解决Spyder中图片显示太小的问题

    最近在做机器学习的作业,需要画决策树.在Spyder中把代码跑了一遍,发现决策树出现在了Spyder的console中,而且图片很小,那些字体都叠在一起.网上搜了一圈好像也没找到解决方案. 但不要紧啊,Anaconda中不是还有Ipython和Jupyter Notebook吗.这两个都可以弹出窗口显示图片.cd到相应路径,在这两个中跑一下之前保存过的python代码就可以了. run XXX.py 以上这篇解决Spyder中图片显示太小的问题就是小编分享给大家的全部内容了,希望能给大家一个参考

  • JS中使用cavas截图网页并解决跨域及模糊问题

    前几天给了个需求对浏览器网页进行截图,把网页统计数据图形表等截图保存至用户本地. 首先对于网页截图,我用的是canvas实现,获取你需要截图的模块的div,从而使用canvas对你需要的模块进行截图. 我们先来引入canvas的js文件,js文件获取地址官网主页:http://html2canvas.hertzen.com/ <script type="text/javascript" src="js/html2canvas.js"></scrip

随机推荐