js页面转码
2016-04-15 13:33
411 查看
前几天碰到一个转码的问题 搞了半天 。项目没有问题 页面统一 utf-8,设置了utf-8 配置了spring转码。
但用ajax 返回json时还是出现了乱码
自己百度了下 可以用 escape 来解决这个问题,
js代码
这里实在后台对json里面的 值进行了编码 ,在js用 unescape 转码
后台代码
后台的转码工具类如下
用escape 要一个一个值的去转 有点麻烦
我在网上提问 有大神回答用16进制来解决@无聊码农
16进制页面转换如下
转自:http://www.w3dev.cn/article/20121207/javascript-encode-string-to-hex-encode.aspx
后台转的方法自行百度~
但用ajax 返回json时还是出现了乱码
自己百度了下 可以用 escape 来解决这个问题,
js代码
$("#cate2").change(function () { $.ajax({ type: "post", url: "<%=path%>/commodity/ChangeFirstCategory", data: "categoryId=" + $(this).val(), success: function (result) { var json = eval(result); var op="" $.each(json,function(i,item){ op += '<option value=' + item["id"]+ '>'; var title = item["title"]; op += unescape(title); op += '</option>'; }); $("#cate3").append(op); } }) });
这里实在后台对json里面的 值进行了编码 ,在js用 unescape 转码
后台代码
@RequestMapping("/ChangeFirstCategory") @ResponseBody public String ChangeFirstCategory(@RequestParam(value="categoryId",required=true) String categoryId,Model model) { EscapeUnescape eu = new EscapeUnescape(); if(categoryId!=null&&categoryId!=""){ int cId = Integer.parseInt(categoryId); List<Category> cateList = categoryService.showList(cId); JSONArray json = new JSONArray(); for(int i =0;i<cateList.size();i++){ JSONObject jo = new JSONObject(); jo.put("id",cateList.get(i).getId()); String title = cateList.get(i).getTitle(); System.out.print(title); title = eu.escape(title); System.out.println(title); jo.put("title",title); json.add(jo); } return json.toString(); } return ""; }
后台的转码工具类如下
package com.ronhan.ctoc.utils.model; public class EscapeUnescape { public String escape(String src) { int i; char j; StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length() * 6); for (i = 0; i < src.length(); i++) { j = src.charAt(i); if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) tmp.append(j); else if (j < 256) { tmp.append("%"); if (j < 16) tmp.append("0"); tmp.append(Integer.toString(j, 16)); } else { tmp.append("%u"); tmp.append(Integer.toString(j, 16)); } } return tmp.toString(); } public String unescape(String src) { StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length()); int lastPos = 0, pos = 0; char ch; while (lastPos < src.length()) { pos = src.indexOf("%", lastPos); if (pos == lastPos) { if (src.charAt(pos + 1) == 'u') { ch = (char) Integer.parseInt(src .substring(pos + 2, pos + 6), 16); tmp.append(ch); lastPos = pos + 6; } else { ch = (char) Integer.parseInt(src .substring(pos + 1, pos + 3), 16); tmp.append(ch); lastPos = pos + 3; } } else { if (pos == -1) { tmp.append(src.substring(lastPos)); lastPos = src.length(); } else { tmp.append(src.substring(lastPos, pos)); lastPos = pos; } } } return tmp.toString(); } }
用escape 要一个一个值的去转 有点麻烦
我在网上提问 有大神回答用16进制来解决@无聊码农
16进制页面转换如下
<script> function sToHex(str) { var val = "",charCode,s; for (var i = 0; i < str.length; i++) { charCode = str.charCodeAt(i); s = charCode.toString(16); if (s.Length==1) s = '0' + s;//不全偶数位,要不会报错 val += '\\' + (charCode > 256 ? 'u' : 'x') + s; } return val; } </script> <b>要编码的字符串</b> <textarea id="taSource" cols="30" rows="5">coding123.net16进制编码</textarea> <b>编码后的16进制内容</b> <textarea id="taRst" cols="30" rows="5"></textarea> <input type="button" value="将字符串编码为16进制字符串" onclick="document.getElementById('taRst').value=sToHex(document.getElementById('taSource').value)"/>
转自:http://www.w3dev.cn/article/20121207/javascript-encode-string-to-hex-encode.aspx
后台转的方法自行百度~
相关文章推荐
- Orace查询数据出现乱码的问题解决思路
- oracle em 按钮乱码解决办法及em网页变成英文
- C#读取中文文件出现乱码的解决方法
- mysql命令提示行连接乱码的解决
- 解决Java程序使用MySQL时返回参数为乱码的示例教程
- Jquery乱码的一次解决过程 图解教程
- 解决realplayer11中文正式版网页右键乱码问题embed_cn.dll
- 计算机中的字符串编码、乱码、BOM等问题详解
- PHP附件下载中文名称乱码的解决方法
- PHP使用PDO操作数据库的乱码问题解决方法
- php+AJAX传送中文会导致乱码的问题的解决方法
- Discuz!nt 源文件变成乱码的解决方法
- jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
- JavaScript中出现乱码的处理心得
- Js,alert出现乱码问题的解决方法
- 深入Lumisoft.NET组件开发碰到乱码等问题的解决方法
- jquery中文乱码的多种解决方法
- Jquery网页出现的乱码问题的三种解决方法
- oracle安装出现乱码等相关问题
- GET方法URL中传递中文参数乱码的解决方法