不知道有没有人和我一样试过在Flash传递非英文字或数字的时候, 出现过乱码呢?? 之前flash8的一位朋友在写了篇无需资料库的聊天室当中有提到过这个问题, 所以这个教程就把每个字节编码成16进制... 这样就不会因为各种语言的编码长度不同而无法正确显示, 非凡适合使用在留言扳和论坛当中哦 :), 好啦...那么就开始吧
String.prototype.encode = function() { //编译部分, 这里使用prototype方便了很多
var s = "";
for (var i = 0; i<this.length; i++) { //根据文字的长度做循环
var d = this.charCodeAt(i); //取得每个字的code代码
var c = this.charAt(i); //取得现有的每个文字
if (d<127) { //这里判定是否为英文字母或数字等Flash player所能接受的文字
s += "\\u"+c; //是的话就存在变量s当中
} else { //假如为非Flash player所能接受的文字的话
s += "\\u"+len(d.toString(16)); // 先给每个字节前加个分隔字段, 然后再来把code代码以16进制编译, 然后再存放到s变量当中
}
}
return s;
};
function len(str) { //因为不同语言的进制长度不一样, 所以我们必须让他们处于一样的长度
while (str.length<4) { //因为中文和日文的编码长度为最长, 4个字节...所以只要判定是否为4就可以了
str = "0"+str; //假如进制字节小于4的话就在前方加个0, 以达到4个字节
}
return str;
}
String.prototype.decode = function() { //反编译部分
var a = this.split("\\u"); //使用split把我们设定分隔字段分开来成为数组
var n = a.length; //取得数组的长度
while (--n) {
var s = a[n];
if(s.length > 1) { //判定n假如大于1就代表是非Flash Player所支援的文字, 而进行导向编译
a[n] = String.fromCharCode(parseInt(s.substring(0, 4), 16)); //取得我们设定的4个字节然后返回16进制之前的code代码, 然后再转换成文字
}
}
return a.join(""); //最后把数组在此结合起来成一行文字, 并回传
};
var test = "各国语言的字节都没问题, zzZZ190!@$, 分かりました, ??? ?????, ?????? ???";
var e = test.encode();
trace(e);
trace(e.decode());
是不是各国语言都可以拼凑在一起了呢