<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    用JavaScript計(jì)算字符串占用字節(jié)數(shù)

    原帖地址

    最近和JavaScript糾纏上了。

    遇到這么一個(gè)問題,數(shù)據(jù)庫(kù)的字符集為UTF-8的,要在頁面上使用JavaScript驗(yàn)證輸入的文本用UTF-8存儲(chǔ)時(shí)占用字節(jié)長(zhǎng)度。JavaScript的String對(duì)象有l(wèi)ength屬性,但是這個(gè)計(jì)算的是字符數(shù),不是字節(jié)數(shù)(問題總是翻來覆去的,記得當(dāng)年玩Delphi的時(shí)候,還得寫程序計(jì)算字符串的字符數(shù),因?yàn)镈elphi中String的length是字節(jié)數(shù)...)。偷懶一點(diǎn)的辦法是將驗(yàn)證代碼中最大長(zhǎng)度設(shè)置為數(shù)據(jù)庫(kù)中對(duì)應(yīng)字段的長(zhǎng)度的1/3,但是這樣準(zhǔn)確來說有點(diǎn)不合適。

    所以想辦法在JavaScript中判斷在UTF-8下存儲(chǔ)的String的字節(jié)數(shù),在網(wǎng)上找到很多關(guān)于Unicode介紹的文檔,最重要的是字符編碼數(shù)值對(duì)應(yīng)的存儲(chǔ)長(zhǎng)度:

    UCS-2編碼(16進(jìn)制) UTF-8 字節(jié)流(二進(jìn)制)
    0000 - 007F 0xxxxxxx (1字節(jié))
    0080 - 07FF 110xxxxx 10xxxxxx (2字節(jié))
    0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx (3字節(jié))

     

    于是代碼如下:

     

    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;
          }
     

     

     

    實(shí)際上,0x0080到0x07ff之間的字符很少會(huì)在實(shí)際用戶輸入中用到。

     

    參考文檔:

    程序員趣味讀物:談?wù)刄nicode編碼 http://www.lihuasoft.net/article/show.php?id=2778



    posted on 2008-05-30 10:09 々上善若水々 閱讀(2931) 評(píng)論(1)  編輯  收藏 所屬分類: JavaScript

    評(píng)論

    # re: 用JavaScript計(jì)算字符串占用字節(jié)數(shù)   回復(fù)  更多評(píng)論   

    發(fā)送到發(fā)改委去熱飯臺(tái)灣人氣,請(qǐng)問騙人家完全平方。
    了附件為破天機(jī)我訪問歐文u破軟件無法。
    主站蜘蛛池模板: 亚洲最大av资源站无码av网址| 国产偷国产偷亚洲高清人| 无码人妻久久一区二区三区免费丨 | 99ee6热久久免费精品6| 亚洲色中文字幕在线播放| 日日噜噜噜噜夜夜爽亚洲精品| 1000部禁片黄的免费看| 麻豆91免费视频| 97se亚洲综合在线| 国产成人aaa在线视频免费观看 | 亚洲综合国产精品| 国产免费69成人精品视频| 91成人在线免费视频| 男女猛烈无遮掩视频免费软件| 久久国产亚洲高清观看| 亚洲无码精品浪潮| 24小时日本在线www免费的| 免费看黄的成人APP| 美国毛片亚洲社区在线观看| 亚洲黄网站wwwwww| 国产亚洲视频在线播放| 日韩一区二区三区免费体验| 18禁美女黄网站色大片免费观看| 国产成人亚洲综合a∨| 亚洲人成网站在线观看播放动漫| 亚洲国产日韩在线视频| 免费a级毛片无码av| 野花高清在线观看免费3中文 | 亚洲精品资源在线| 亚洲区小说区图片区QVOD| 国产成人在线免费观看| 国产精品免费观看久久| 999久久久免费精品播放| 51午夜精品免费视频| 男男gvh肉在线观看免费| 亚洲日日做天天做日日谢| 伊人久久综在合线亚洲2019| 一本色道久久综合亚洲精品高清| 国产a不卡片精品免费观看| 久久电影网午夜鲁丝片免费| 精品国产sm捆绑最大网免费站|