您的位置:首页 > 其它

1 用最原始的方法解决乱码问题---直接手动转码

2017-07-27 20:30 633 查看
一 在前端将中文转化为unicode

function encodeUnicode(str) {
var res = [];
for ( var i=0; i<str.length; i++ ) {
res[i] = ( "00" + str.charCodeAt(i).toString(16) ).slice(-4);
}
return "\\u" + res.join("\\u");
}


二 java后端将unicode转为中文

public String convertUnicodeToChinese(String utfString){
StringBuilder sb = new StringBuilder();
int i = -1;
int pos = 0;

while((i=utfString.indexOf("\\u", pos)) != -1){
sb.append(utfString.substring(pos, i));
if(i+5 < utfString.length()){
pos = i+6;
sb.append((char)Integer.parseInt(utfString.substring(i+2, i+6), 16));
}
}

return sb.toString();
}


三 解析

1 unicode是16进制,和中文汉字有着意义对应的关系:

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。 

目前的用于实用的 Unicode 版本对应于 UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。

utf-8长度是1-6个字节,第一个字节的高位1的数目指明了这个utf-8的字符使用的byte数目,在UTF-8编码集中,每个汉字使用 3个字符表示

 2 charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。

 3 toString(16)数字以16进制显示

4 slice(-4)返回最后四位数字

5 java中把unicode转为汉字是一个逆向过程。

6 至于其中的转换规则我还不太懂,请大佬告诉我!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: