今天在做应用时发现, javascripte默认的获取字符串长度, 把 英文 和 中文都按照1来计算
比如 var str1 = "Hello"; str1.length的值是等于5
var str2 = "中国"; str2.length的值是等于2
结果和我们所期望的不是很一致, 因为汉字在java等高级语言中是两个字符, str2的长度应该为4.
这就引出今天所要解决的问题, 获得中英混合字符串的长度, 和截取字符串的方法
代码如下
//获得字符串长度, 包含中文 function strlen(str) { var len = 0; for (var i = 0; i < str.length; i++) { if (str.charCodeAt(i) > 255) len += 2; else len ++; } return len; }
//截取字符串, 包含中文
function substr(str, len){
if(!str || !len) { return ''; }
//预期计数:中文2字节,英文1字节
var a = 0;
//循环计数
var i = 0;
//临时字串
var temp = '';
for (i=0;i<str.length;i++){
if (str.charCodeAt(i)>255){
//按照预期计数增加2
a+=2;
}else{
a++;
}
//如果增加计数后长度大于限定长度,就直接返回临时字符串
if(a > len) { return temp; }
//将当前内容加到临时字符串
temp += str.charAt(i);
}
//如果全部是单字节字符,就直接返回源字符串
return str;
}
function JsonToStr(o) {
var arr = [];
var fmt = function(s) {
if (typeof s == 'object' && s != null) return JsonToStr(s);
return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s;
}
for (var i in o) arr.push("'" + i + "':" + fmt(o[i]));
return '{' + arr.join(',') + '}';
}