javascript全形半形問題

來源:互聯網
上載者:User
今天coding時,發現系統有一個地方是需要做全形自動轉半形的,就從網上搜到了下面的東西
檢查全形半形
var s = "bABD1232232";
var strCode;
for(var i=0;i<s.length;i++)
{
    strCode = s.charCodeAt(i);
    if((strCode>65248)||(strCode==12288))  //12288是空格
    {
        alert("有全形!");
        break;
    }
}
半形字元由一個位元組儲存,全形字元用兩個位元組儲存,所以碼值的絕對值小於256的就是半形,否則就是全形。
全形轉半形的函數
function DBC2SBC(str)
{

var result = '';
for(var i=0;i<str.length;i++){
code = str.charCodeAt(i);                         //擷取當前字元的unicode編碼
if (code >= 65281 && code <= 65373)     //在這個unicode編碼範圍中的是所有的英文字母已及各種字元
{
    result += String.fromCharCode(str.charCodeAt(i) - 65248);
    //把全形字元的unicode編碼轉換為對應半形字元的unicode碼
}else if (code == 12288)//空格
{
    result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);
}else
{
    result += str.charAt(i);
}
}
return result;
}
javascript是16位編碼
65281到65373隻有這裡面的資料才是全形,這裡要有範圍限制的
關於65281的演算法是這麼來的
比如全形的字元A
編碼為FF21
轉成16進位是
1111 1111 0010 0001
對兩個位元組分別取10進位的值
第一個位元組是
65280
第二個位元組是
33
所以a的65313

對這個編碼減去
65248得半形的

65248比65280小32
所以我想ASC碼小於32的就不能轉換
因為轉換了字元編碼的前一位元組就不能是1111 1111即FF
就會比這個小,那應該就不是全形了
就是說第一位元組不能滿足全為1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.