網上有不少解決方案,貢獻下我使用的兩個函數:
/**
* 得到字符串的字符長度(一個漢字占兩個字符長)
*/
function getBytesLength(str) {
// 在GBK編碼裡,除了ASCII字符,其它都占兩個字符寬
return str.replace(/[^\x00-\xff]/g, 'xx').length;
}
/**
* 根據字符長來截取字符串
*/
function subStringByBytes(val, maxBytesLen) {
var len = maxBytesLen;
var result = val.slice(0, len);
while(getBytesLength(result) > maxBytesLen) {
result = result.slice(0, --len);
}
return result;
}
一個實例: