js獲取字符串的字節長度


占用3個字節的范圍
U+2E80 - U+2EF3 : 0xE2 0xBA 0x80 - 0xE2 0xBB 0xB3 共 115 個
U+2F00 - U+2FD5 : 0xE2 0xBC 0x80 - 0xE2 0xBF 0x95 共 213 個
U+3005 - U+3029 : 0xE3 0x80 0x85 - 0xE3 0x80 0xA9 共 36 個
U+3038 - U+4DB5 : 0xE3 0x80 0xB8 - 0xE4 0xB6 0xB5 共 7549 個
U+4E00 - U+FA6A : 0xE4 0xB8 0x80 - 0xEF 0xA9 0xAA 共 44138 個
U+FA70 - U+FAD9 : 0xEF 0xA9 0xB0 - 0xEF 0xAB 0x99 共 105 個

合計: 52156

占用4個字節的范圍

U+20000 - U+2FA1D : 0xF0 0xA0 0x80 0x80 - 0xF0 0xAF 0xA8 0x9D 共 64029 個

合計: 64029

所以,我認為答案應該是:3個或4個字節

 

 方法一:循環遍歷

參考:http://www.cnblogs.com/sniper007/p/3309787.html

 1 //字符編碼數值對應的存儲長度:     
 2 //UCS-2編碼(16進制) UTF-8 字節流(二進制)    
 3 //0000 - 007F       0xxxxxxx (1字節)     
 4 //0080 - 07FF       110xxxxx 10xxxxxx (2字節)     
 5 //0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx (3字節)    
 6 String.prototype.getBytesLength = function() {   
 7     var totalLength = 0;     
 8     var charCode;  
 9     for (var i = 0; i < this.length; i++) {  
10         charCode = this.charCodeAt(i);  
11         if (charCode < 0x007f)  {     
12             totalLength++;     
13         } else if ((0x0080 <= charCode) && (charCode <= 0x07ff))  {     
14             totalLength += 2;     
15         } else if ((0x0800 <= charCode) && (charCode <= 0xffff))  {     
16             totalLength += 3;   
17         } else{  
18             totalLength += 4;   
19         }          
20     }  
21     return totalLength;   
22 }  
23 var str="你好嗎?111?";  
24 alert("字符數"+str.length+" ,字節數"+str.getBytesLength());    
25 //Java中的字節數==="字符串".getBytes("UTF-8").length   
26   //-->  

 

 方法二:使用正則表達式

  待整理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM