js區分gbk和utf-8的計算字串長度程式碼例項

admin發表於2017-03-31

如果要獲取一個字串中字元的長度,可能會是使用如下類似程式碼:

[JavaScript] 純文字檢視 複製程式碼
var str="螞蟻部落softwhy.com";
console.log(str.length);

上面的程式碼輸出值是15,也就是說length屬性並不會區分是漢子還是英文字元,一個字元就是一個長度。

但是有時候我們需要區分中英文和編碼格式,比如為了匹配資料庫的長度範圍,例如,GBK的資料庫某欄位是varchar(10),就相當於5個漢字長度,下面就分別介紹一下gbk和utf-8的編碼下獲取字串長度程式碼例項。

一.gbk下獲取字串的長度:

在gbk下,一個漢字佔2個長度,一個英文字元依然是佔一個長度,程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
var str="螞蟻部落softwhy.com";
function getStrLeng(str){
  var realLength=0;
  var len=str.length;
  var charCode=-1;
  for(var i=0;i<len;i++){
    charCode=str.charCodeAt(i);
    if(charCode>=0&&charCode<=128){ 
      realLength += 1;
    }
        else{ 
      // 如果是中文則長度加2
      realLength += 2;
    }
  } 
  return realLength;
}
console.log(getStrLeng(str));

上面的程式碼實現了我們要求的功能,下面介紹一下它的實現過程。

程式碼註釋:

1.var str="螞蟻部落softwhy.com",要計算長度的字串。

2.function getStrLeng(str){},此函式實現了GBK編碼計算字串長度的功能。

3.var realLength=0,宣告一個變數並賦初值為0,用來存放字串最終的長度。

4.var len=str.length,獲取字串中字元的個數。

5.var charCode=-1,宣告一個變數並賦初值為-1,這個賦值其實是有點隨意的,用來儲存每一個字元的Unicode編碼值。

6.for(var i=0;i<len;i++),遍歷字串中的每一個字元。

7.charCode=str.charCodeAt(i),獲取字元的Unicode編碼值。

8.if(charCode>=0&&charCode<=128){ 

  realLength += 1;

}判斷Unicode碼值的是否在0-128之間,在這之間的都是abc或者數字之類的拉丁字元,並非漢字,所以長度只加1。

9.else{ 

  realLength += 2;

}否則的話長度應該加2.

10.return realLength,返回長度。

二.utf-8下獲取字串的長度:

如果按照utf-8編碼方式獲取字串長度,一個漢字佔三個長度,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
var str="螞蟻部落softwhy.com";
function getStrLeng(str){
  var realLength=0;
  var len=str.length;
  var charCode=-1;
  for(var i=0;i<len;i++){
    charCode=str.charCodeAt(i);
    if(charCode>=0&&charCode<=128){ 
      realLength += 1;
    }
        else{ 
      // 如果是中文則長度加2
      realLength += 3;
    }
  } 
  return realLength;
}
console.log(getStrLeng(str));

同樣的道理,只是這裡是如果遇到漢字加3而已,其餘的和第一段程式碼一模一樣。

相關閱讀:

1.length屬性可以參閱javascript String length一章節。

2.charCodeAt()可以參閱javascript charCodeAt()一章節。

相關文章