日期:2014-05-16  浏览次数:20349 次

使用javascripte 获得含中文字符串长度 截取含中文字符串 json转字符串 js

今天在做应用时发现, 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(',') + '}';      
}