js页面转码
来源:互联网 发布:秦可卿怎么死的知乎 编辑:程序博客网 时间:2024/06/08 10:50
前几天碰到一个转码的问题 搞了半天 。项目没有问题 页面统一 utf-8,设置了utf-8 配置了spring转码。
但用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
后台转的方法自行百度~
0 0
- js页面转码
- (转)js页面跳转
- JS打印页面(转)
- 【转】JS跳转页面方法
- (转)js页面跳转整理
- 【js】js刷新页面
- 用JS获得当前页面详细地址 【转】
- js跳转页面方法(转)
- js页面转跳的方法
- js跳转页面方法(转)
- js跳转页面方法(转)
- js跳转页面方法(转)
- 【转】js倒计时并实现页面跳转
- js跳转页面方法(转)
- js跳转页面方法(转)
- js跳转页面方法(转)
- js跳转页面方法(转)
- js跳转页面方法(转)
- 从数据仓库到数据视图
- BestCoder Round #72 Clarke and chemistry
- chrome浏览器安装
- zoj3490
- 判断两个二叉树是否相等(仅结构) -- 递归和非递归实现
- js页面转码
- IQKeyboardManager的使用笔记
- Navicat for SQL Server有哪些功能
- 小菜鸟成长记
- 推荐-计算机视觉、图像处理方面的论文阅读笔记
- WAP调用微信支付https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1
- Linux-简单的Makefile编写
- LINUX下一款不错的网站压力测试工具webbench
- Codeforces 660F:Bear and Bowling 4