最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript 計算字符串在localStorage中所占字節(jié)數

 更新時間:2015年10月21日 08:42:46   投稿:hebedich  
本文給大家分享的是使用Javascript 計算字符串在localStorage中所占字節(jié)數,分別對UTF-8和UTF-16兩種編碼進行了詳細說明,有需要的小伙伴可以參考下。

最近項目有個需求要用js計算一串字符串寫入到localStorage里所占的內存,眾所周知的,js是使用Unicode編碼的。而Unicode的實現有N種,其中用的最多的就是UTF-8和UTF-16。因此本文只對這兩種編碼進行討論。

下面這個定義摘自維基百科(http://zh.wikipedia.org/zh-cn/UTF-8),做了部分刪減。

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,可以表示Unicode標準中的任何字符,且其編碼中的第一個字節(jié)仍與ASCII相容,使用一至四個字節(jié)為每個字符編碼

其編碼規(guī)則如下:

字符代碼在000000 – 00007F之間的,用一個字節(jié)編碼;

000080 – 0007FF之間的字符用兩個字節(jié);
000800 – 00D7FF 和 00E000 – 00FFFF之間的用三個字節(jié),注: Unicode在范圍 D800-DFFF 中不存在任何字符;
010000 – 10FFFF之間的用4個字節(jié)。

而UTF-16 則是定長的字符編碼,大部分字符使用兩個字節(jié)編碼,字符代碼超出 65535 的使用四個字節(jié),如下:

000000 – 00FFFF 兩個字節(jié);
010000 – 10FFFF 四個字節(jié)。

一開始認為既然頁面用的是UTF-8編碼,那么存入localStorage的字符串,應該也是用UTF-8編碼的。但后來測試發(fā)現,明明計算出的size是不到5MB,存入localStorage卻拋異常了。想了想,頁面的編碼是可以改的。如果localStorage按照頁面的編碼存字符串,不就亂套了?瀏覽器應該都是使用UTF-16編碼的。用UTF-16編碼計算出5MB的字符串,果然順利寫進去了。超過則失敗了。

好了,附上代碼實現。計算規(guī)則就是上面寫的,為了計算速度,把兩個for循環(huán)分開寫了。

/**
   * 計算字符串所占的內存字節(jié)數,默認使用UTF-8的編碼方式計算,也可制定為UTF-16
   * UTF-8 是一種可變長度的 Unicode 編碼格式,使用一至四個字節(jié)為每個字符編碼
   *
   * 000000 - 00007F(128個代碼)   0zzzzzzz(00-7F)               一個字節(jié)
   * 000080 - 0007FF(1920個代碼)   110yyyyy(C0-DF) 10zzzzzz(80-BF)       兩個字節(jié)
   * 000800 - 00D7FF
    00E000 - 00FFFF(61440個代碼)  1110xxxx(E0-EF) 10yyyyyy 10zzzzzz      三個字節(jié)
   * 010000 - 10FFFF(1048576個代碼) 11110www(F0-F7) 10xxxxxx 10yyyyyy 10zzzzzz 四個字節(jié)
   *
   * 注: Unicode在范圍 D800-DFFF 中不存在任何字符
   * {@link http://zh.wikipedia.org/wiki/UTF-8}
   *
   * UTF-16 大部分使用兩個字節(jié)編碼,編碼超出 65535 的使用四個字節(jié)
   * 000000 - 00FFFF 兩個字節(jié)
   * 010000 - 10FFFF 四個字節(jié)
   *
   * {@link http://zh.wikipedia.org/wiki/UTF-16}
   * @param {String} str
   * @param {String} charset utf-8, utf-16
   * @return {Number}
   */
  var sizeof = function(str, charset){
    var total = 0,
      charCode,
      i,
      len;
    charset = charset ? charset.toLowerCase() : '';
    if(charset === 'utf-16' || charset === 'utf16'){
      for(i = 0, len = str.length; i < len; i++){
        charCode = str.charCodeAt(i);
        if(charCode <= 0xffff){
          total += 2;
        }else{
          total += 4;
        }
      }
    }else{
      for(i = 0, len = str.length; i < len; i++){
        charCode = str.charCodeAt(i);
        if(charCode <= 0x007f) {
          total += 1;
        }else if(charCode <= 0x07ff){
          total += 2;
        }else if(charCode <= 0xffff){
          total += 3;
        }else{
          total += 4;
        }
      }
    }
    return total;
  }

相關文章

  • 微信小程序實現全局搜索代碼高亮的示例

    微信小程序實現全局搜索代碼高亮的示例

    本篇文章主要介紹了微信小程序實現全局搜索代碼高亮的示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • javascript實現移動端輪播圖

    javascript實現移動端輪播圖

    這篇文章主要為大家詳細介紹了javascript實現移動端輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • js小數運算出現多位小數如何解決

    js小數運算出現多位小數如何解決

    關于JavaScript小數進行加、減、乘、除出現多位小數問題,自己研究了一下,而且作了相關的測試,收獲不少知識點,需要的朋友可以參考下
    2015-10-10
  • js實現的在本地預覽圖片功能示例

    js實現的在本地預覽圖片功能示例

    這篇文章主要介紹了js實現的在本地預覽圖片功能,結合實例形式分析了JavaScript兼容移動web與IE瀏覽器的圖片預覽功能相關實現技巧,需要的朋友可以參考下
    2019-11-11
  • javascript變量提升和閉包理解

    javascript變量提升和閉包理解

    本篇文章給大家詳細分析了javascript變量提升和閉包的相關知識點,對此有興趣的朋友可以參考下。
    2018-03-03
  • 技術男用來對妹子表白的百度首頁

    技術男用來對妹子表白的百度首頁

    這篇文章主要介紹了技術男用來對妹子表白的百度首頁,非常有創(chuàng)意、有意思,需要的朋友可以參考下
    2014-07-07
  • JavaScript實現頁面跳轉的幾種常用方式

    JavaScript實現頁面跳轉的幾種常用方式

    這篇文章主要介紹了JavaScript實現頁面跳轉的幾種常用方式,結合實例形式對比分析了JavaScript頁面跳轉的常見實現技巧與相關注意事項,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • JS中的==運算: [''''] == false —>true

    JS中的==運算: [''''] == false —>true

    這篇文章主要介紹了JS中的==運算: [''] == false —>true的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • jsp js鼠標移動到指定區(qū)域顯示選項卡離開時隱藏示例

    jsp js鼠標移動到指定區(qū)域顯示選項卡離開時隱藏示例

    jsp js 鼠標移動到指定區(qū)域顯示選項卡示例,離開時隱藏,具體實現代碼如下,感興趣的朋友可以了解下哈,希望對你有所幫助
    2013-06-06
  • 基于javascript實現動態(tài)顯示當前系統(tǒng)時間

    基于javascript實現動態(tài)顯示當前系統(tǒng)時間

    這篇文章主要介紹了基于javascript實現動態(tài)顯示當前系統(tǒng)時間,以一個完整實例形式較為詳細的分析了js動態(tài)顯示當前系統(tǒng)時間的實現技巧,需要的朋友可以參考下
    2016-01-01

最新評論

于都县| 灵璧县| 苍南县| 临泉县| 包头市| 凌云县| 遵义县| 承德县| 余江县| 巫溪县| 日土县| 澳门| 大竹县| 龙口市| 延寿县| 常州市| 梁山县| 湛江市| 阿拉善盟| 邹平县| 阳朔县| 大埔县| 平舆县| 湖口县| 五家渠市| 安康市| 大方县| 天门市| 舞钢市| 公主岭市| 抚宁县| 秀山| 尚志市| 抚州市| 宁城县| 明溪县| 东乡县| 阳信县| 六枝特区| 巴里| 石棉县|