大家一定經常會遇到這樣的問題,一個字串用的長度和實際佔用的位元組數不一樣,這是因為其中包含漢字活著全形字元。
(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都被認為是單位元組字。
大家討論一下。