中文,日文占2个字符,英文占1个字符,混合在一起时候计算长度:
ruby
string.encode("gbk").force_encoding("binary").force_encoding("gbk").encode("utf-8")
# 简写
string.encode('gbk').b.force_encoding("gbk").encode("utf-8")
JS
// 获取字符串长度
function getLength(str){
var strLength = 0; // 记录str的总长度
var Len = str.length;
for(let i=0;i<Len;i++){
var charCode = str.charCodeAt(i);// 使用charCodeAt返回单个字符的Unicode编码
// if((charCode >= 0 && charCode <= 128)||(charCode >= 65377 && charCode <= 65439)){
if(encodeURI(charCode).length<=4){
strLength++; //英文字符加1
}else {
strLength = strLength+2;//中文,日文字符加2
}
}
return strLength;
}
// 截取字符串
function subStrNum(str, len) {
var strLen = str.length;
var strCut = '';
var strLength = 0;
for(let i=0;i<strLen;i++){
var charCode = str.charAt(i); //使用charAt获取单个字符;
strLength++
if(encodeURI(charCode).length>4){ //使用encodeURI获取编码长度
strLength++;
}
if(strLength > len){
return strCut;
}
strCut = strCut.concat(charCode);//单个字符进行合并
}
if(strLength < len){
return str
}
}