用JavaScript計算字串佔用位元組數
最近和JavaScript糾纏上了。
遇到這麼一個問題,資料庫的字符集為UTF-8的,要在頁面上使用JavaScript驗證輸入的文字用UTF-8儲存時佔用位元組長度。JavaScript的String物件有length屬性,但是這個計算的是字元數,不是位元組數(問題總是翻來覆去的,記得當年玩Delphi的時候,還得寫程式計算字串的字元數,因為Delphi中String的length是位元組數...)。偷懶一點的辦法是將驗證程式碼中最大長度設定為資料庫中對應欄位的長度的1/3,但是這樣準確來說有點不合適。
所以想辦法在JavaScript中判斷在UTF-8下儲存的String的位元組數,在網上找到很多關於Unicode介紹的文件,最重要的是字元編碼數值對應的儲存長度:
UCS-2編碼(16進位制) UTF-8 位元組流(二進位制)
0000 - 007F 0xxxxxxx (1位元組)
0080 - 07FF 110xxxxx 10xxxxxx (2位元組)
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx (3位元組)
於是程式碼如下:
function mbStringLength(s) {
var totalLength = 0;
var i;
var charCode;
for (i = 0; i < s.length; i++) {
charCode = s.charCodeAt(i);
if (charCode < 0x007f) {
totalLength = totalLength + 1;
} else if ((0x0080 <= charCode) && (charCode <= 0x07ff)) {
totalLength += 2;
} else if ((0x0800 <= charCode) && (charCode <= 0xffff)) {
totalLength += 3;
}
}
//alert(totalLength);
return totalLength;
}
實際上,0x0080到0x07ff之間的字元很少會在實際使用者輸入中用到。
遇到這麼一個問題,資料庫的字符集為UTF-8的,要在頁面上使用JavaScript驗證輸入的文字用UTF-8儲存時佔用位元組長度。JavaScript的String物件有length屬性,但是這個計算的是字元數,不是位元組數(問題總是翻來覆去的,記得當年玩Delphi的時候,還得寫程式計算字串的字元數,因為Delphi中String的length是位元組數...)。偷懶一點的辦法是將驗證程式碼中最大長度設定為資料庫中對應欄位的長度的1/3,但是這樣準確來說有點不合適。
所以想辦法在JavaScript中判斷在UTF-8下儲存的String的位元組數,在網上找到很多關於Unicode介紹的文件,最重要的是字元編碼數值對應的儲存長度:
UCS-2編碼(16進位制) UTF-8 位元組流(二進位制)
0000 - 007F 0xxxxxxx (1位元組)
0080 - 07FF 110xxxxx 10xxxxxx (2位元組)
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx (3位元組)
於是程式碼如下:
function mbStringLength(s) {
var totalLength = 0;
var i;
var charCode;
for (i = 0; i < s.length; i++) {
charCode = s.charCodeAt(i);
if (charCode < 0x007f) {
totalLength = totalLength + 1;
} else if ((0x0080 <= charCode) && (charCode <= 0x07ff)) {
totalLength += 2;
} else if ((0x0800 <= charCode) && (charCode <= 0xffff)) {
totalLength += 3;
}
}
//alert(totalLength);
return totalLength;
}
實際上,0x0080到0x07ff之間的字元很少會在實際使用者輸入中用到。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-332621/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript計算字串位元組長度JavaScript字串
- Java基本型別佔用的位元組數(char佔用幾個位元組問題)Java型別
- java中基本型別佔用位元組數Java型別
- ORACLE 資料型別佔用的位元組數(轉)Oracle資料型別
- Oracle中文漢字佔用位元組Oracle
- 獲得字串實際長度,漢字佔用2個位元組。字串
- C中指標佔用的位元組數(Android之JNI)指標Android
- JavaScript - 獲取字串位元組數(函式封裝)JavaScript字串函式封裝
- 字串位元組數問題字串
- Java陣列物件佔用多少個位元組?Java陣列物件
- JAVA——一個漢字佔用多少位元組?Java
- GBase 8a中一個字元佔用位元組數說明字元
- 計算返回單、雙位元組字元混合字串長度字元字串
- 1.iOS --佔用的位元組的總結iOS
- 【附錄】 字符集(一) 漢字在oracle中佔用位元組數Oracle
- 檢視oracle 欄位的資料佔用的位元組數函式Oracle函式
- AIX程式記憶體佔用數的計算AI記憶體
- Linux程式記憶體佔用數的計算Linux記憶體
- js獲取字串位元組數方法小結JS字串
- node計算記憶體佔用記憶體
- utf-8字元所佔位元組數字元
- C#中如何按位元組數擷取字串?C#字串
- MySQL記憶體佔用計算公式MySql記憶體公式
- 字串的長度,是字元數量,還是位元組數量?字串字元
- 【原創】用Java實現按位元組長度擷取字串的方法Java字串
- Catalan數計算及應用
- JavaScript組合字串JavaScript字串
- Java中boolean到底佔幾位元組?JavaBoolean
- 計算機中數值和字串怎麼用二進位制表示?計算機字串
- javaScript中計算字串MD5JavaScript字串
- 16進位制字串轉位元組字串
- JAVA中求解物件所佔位元組大小Java物件
- 計算一個表佔用的空間的大小
- 從北航計算機到位元組演算法崗計算機演算法
- 位元組流轉16進位制字串字串
- 計算組合數 (sdut oj)
- JavaScript輸入字串字數倒計JavaScript字串
- Java char 型別究竟佔幾個位元組?Java型別