js字符串长度与获取的问题
当字符串中有中文字符的时候在获取字符以及其长度上会有一定的问题。例如
//demo1
var str='谦';
console.log(str.length,str.charAt(0)) // 1 谦
demo2
var s = "?";
s.length // 2 返回长度是2
s.charAt(0) // '' 得到空字符串
s.charAt(1) // '' 得到空字符串
s.charCodeAt(0) // 55362
s.charCodeAt(1) // 57271
从上面可以看出js在处理字符串的时候会有一定的问题,比如长度获取、字符遍历。和常规的获取有一定的不同。
问题
哪些情况下会出现上诉的问题?
出现上诉的问题的原因?
如何解决(得到正确的长度以及能够和普通的字符一样遍历不出错)?
1,因为
javascript
是以utf-16进行编码的,它的长度都是固定的2字节。所以无论是英文字符,还是中文字符还是其他任何字符都会最终转化成16位的编码格式。所以length得到的长度是用来表示该字符的位数来决定的。2,虽然表示英文字符只需要一个字节,但是在javascript中,它是用两个字节表示的,所以length也是1,一般的中文字符是可以通过两个字节表示的,但是有些字,比如"?"超出了两个字节表示的字符范围,所以就用了4个字节,所以对应的length就是2啦
3,解决:对于这个问题可以通过
参考:
unicode与javascript详解