通过javascript判断某个字符是否占用两个的方法
通过javascript判断某个字符是否占用两个的方法
大家一定经常会遇到这样的问题,一个字符串用的长度和实际占用的字节数不一样,这是因为其中包含汉字活着全角字符。(1)有escape函数,可以取得一个字符的16进制的unicode码,如:
%u码 (当码长为2的时候可以省略u,如果加上u必须在前面填充0一保证4位长)
通过unescape取得16进制码对应的字符
在网页中输出:也可以通过 &#十进制码; 来输出某个码对应的字符。
(2)javascript中还可以从一个字符串中用 串.charCodeAt(i)取得该字符的10进制的unicode 码,
可以通过String.fromCharCode(十进制码)取得该码对应的字符
但是我还是没有找到一个合理的争取得方法来判断一个字符到底占用几个字节。
有人说 十进制unicode码大于255的字符就占用两个字节,不知道是否有根据。
(3)vbscript中我通过判断其asc码是否为负数来判断其是否占用两个字节,这种判断是否正确(asc()取得某字符的asc码,chr()取得某asc码对应的字符)
(4)那么javascript中如何获得asc码?这个需要大家帮忙!
unicode码和asc码是否是同一种码? 我认为不是
(5)我发现asc一般是从32到128,然后就是负数。从0到31是什么?129以后是什么?不知道。
而负数asc,我们都认为他是占用两个字节的汉字,全角字符和特殊字符。
从0-128这一段,unicode和asc一样的。而从unicode从129以上的有一部分的asc为负数,有一部分没有asc,所以我认为是不是可以认为unicode从129以上的就都占用两个字符呢?
也就是现在有一个矛盾,是不是asc码为负数的都是双字节字符,如果这个成立,那么就得出unicode为129以上的都是双字节字,而网上流传着的却是
String.prototype.len=function()
{
return this.replace(/[^/x00-/xff]/g,"**").length;
}
也就是256以上才认为是双字节字。而129-255都被认为是单字节字。
大家讨论一下。