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
原创粉丝点击