escape编码与unescape解码汉字出现乱码的解决方法


Posted in Javascript onJuly 02, 2014

今天的项目中遇到需要用javascript的escape编码汉字再用unescape解码的情况,测试代码段的时候出现了乱码的情况。
具体情况如下:
首先,用EditPlus打开测试页面test.html,编辑如下html代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>unescape测试</title>
</head>
<body>
<script>
var teststr=escape("三水点靠木");
document.write(teststr);
</script>
</body>
</html>

页面打印输出:

%uFFFD%u0171%uFFFD%u05AE%uFFFD%uFFFD

此时可以看出情况不对,单从汉字对应的字符数量上来说已经不对了!
再使用如下代码测试unescape解码后的汉字:

var relstr=unescape("%uFFFD%u0171%uFFFD%u05AE%uFFFD%uFFFD");
document.write(relstr);

出现了乱码:�ű�֮��

解决方法:
用Dreamweaver打开test.html文件,发现了问题所在!
原先的那段

var teststr=escape("三水点靠木");

变成了

var teststr=escape("ű֮");

可见是编辑器的初始编码造成的!
在Dreamweaver中将汉字改回来,重新运行test.html,得到了对应的编码:

%u811A%u672C%u4E4B%u5BB6

此时再用unescape解码:

var relstr=unescape("%u811A%u672C%u4E4B%u5BB6");
document.write(relstr);

就得到了原先正确的汉字:三水点靠木!

Javascript 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 18 Javascript
javascript 模拟点击广告
Jan 02 Javascript
Jquery实现三层遍历删除功能代码
Apr 23 Javascript
javascript内置对象操作详解
Feb 04 Javascript
javascript事件冒泡实例分析
May 13 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
Vue获取DOM元素样式和样式更改示例
Mar 07 Javascript
vue+axios+promise实际开发用法详解
Oct 15 Javascript
javascript导出csv文件(excel)的方法示例
Aug 25 Javascript
关于JSON解析的实现过程解析
Oct 08 Javascript
React配置子路由的实现
Jun 03 Javascript
js获取IP地址的方法小结
Jul 01 #Javascript
jQuery截取指定长度字符串的实现原理及代码
Jul 01 #Javascript
原生js事件的添加和删除的封装
Jul 01 #Javascript
jQuery的:parent选择器定义和用法
Jul 01 #Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
Jul 01 #Javascript
JavaScript利用正则表达式去除日期中的“-”
Jul 01 #Javascript
jquery实现图片按比例缩放示例
Jul 01 #Javascript
You might like
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
2016/10/13 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
layui使用label标签的方法
2019/09/14 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
python实现读取命令行参数的方法
2015/05/22 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
介绍一下linux的文件权限
2012/02/15 面试题
房地产销售经理岗位职责
2014/01/01 职场文书
安全生产检查通报
2014/01/29 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫