`
yiminghe
  • 浏览: 1436509 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

前后端编码传递

    博客分类:
  • java
阅读更多

背景:

 

关于编码是 BS 的开发是个大问题,包括:


1.jsp文件 编码问题

2.网络传输编码问题


今天帮后端点忙,顺便尝试一个新的解决思路:Unicode escape sequence


即 unicode 转义字符,在 java (参考1参考2 ) 以及 javascript(参考 ecmascript-262-5th 6 sourcetext 以及 8.4 the string type) 中都有对应的解析机制,这样我们只需在网络中传输ascii字符即可。

 

传输:


client -> server


javascript 编码:

 

function padding4(c) {
while (c.length < 4) {
        c = "0" + c;
    }
    return c;
}

function encode(str) {
    return str.replace(/./g, function (t) {
        return "\\u" + padding4(t.charCodeAt(0).toString(16));
    })
}

 

java 解码:

 

static String reverse(String c) {
    Pattern pattern = Pattern.compile("\\\\u([0-9a-f]{4,4})", Pattern.CASE_INSENSITIVE);

    StringBuffer sb = new StringBuffer();
    Matcher m = pattern.matcher(c);
    while (m.find()) {
        String n = m.group(1);
        char ok = (char) Integer.parseInt(n, 16);
        m.appendReplacement(sb, ok + "");
    }
    m.appendTail(sb);
    return sb.toString();
}

 

server -> client


java 编码:

 

static String js(char my) {
    String str = Integer.toHexString((int) my.charAt(0));
    while (str.length() < 4) {
        str = "0" + str;
    }
    return "\\\\u" + str;
}

 

javascript 解码:

 

function decode(str) {
    return str.replace(/\\u([0-9a-f]{4,4})/ig, function (t,m1) {
        return String.fromCharCode(parseInt(m1,16));
    })
}

 

甚至若是具体是通过 jsonp , ajax 来获取,server可直接生成 "\uxxxx",解码即交给 javascript 引擎即可。

 

缺点:


优点即是和服务器编码配置无关,缺点也是很明显的:


1。对前后端不透明

2。编码不够compact ,当然不如直接编码二进制传递了。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics