分享

JavaScript 全角半角转换问题

 quasiceo 2015-02-23
2010-12-28 17:32 302人阅读 评论(0) 收藏 举报

<script language=JAVAscript>
var s="b";
var strCode
for(var i=0;i<s.length;i++)
{
strCode=s.charCodeAt(i);
if((strCode>65248)||(strCode==12288))
{
alert("有全角");
break;
}

}
</script>
半角字符由一个字节保存,全角字符用两个字节保存
所以码值的绝对值小于256的就是半角,否则就是全角

问题一:全角除了空格charCode是12288落在0~65248之间,还有哪些在字符也落在这个区间之内?
问题二:如果用正则
<script language="JAVAscript">
function go(obj){
obj.value=obj.value.replace(/([^/x00-/xff])/g,function($1){return String.fromCharCode($1.charCodeAt(0)-65248)});
}
由于正则不管是八进制(最多3位),16进制(2位)如果输入的是全半角混编的怎么办?
响应者 1:
第一个问题,你的范围有问题,
<script language=JAVAscript>
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;
}
alert(DBC2SBC("FSDFSDG广泛豆腐干"))
</script>


下面的这段是我自己猜测的
全角转半角
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


而你的第二个问题,根本不用考虑混用的时候
因为
replace的第一个参数正则会区分开的
响应者 2:
就第一个问题shift+$在全角下输出为¥其CharCode为65509已经超出范围
我知道这个范围是code >= 65281 && code <= 65373对于¥这样的符号又
怎么办?

第二个问题,replace会区分全角半角?怎么区分?
响应者 3:
function ToDBC(obj)//全角转半角
{
var str=obj.value;
var result="";
for (var i = 0; i < str.length; i++)
{
if (str.charCodeAt(i)==12288)
{
result+= String.fromCharCode(str.charCodeAt(i)-12256);
continue;
}
if (str.charCodeAt(i)>65280 && str.charCodeAt(i)<65375)
result+= String.fromCharCode(str.charCodeAt(i)-65248);
else result+= String.fromCharCode(str.charCodeAt(i));
}
obj.value=result;

}


///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248

1//半角转换为全角函数
2 function ToDBC(txtstring)
3 {
4 var tmp = "";
5
6 for(var i=0;i<txtstring.length;i++)
7 {
8 if(txtstring.charCodeAt(i)==32)
9 {
10 tmp= tmp+ String.fromCharCode(12288);
11 }
12 if(txtstring.charCodeAt(i)<127)
13 {
14 tmp=tmp+String.fromCharCode(txtstring.charCodeAt(i)+65248);
15 }
16
17 }
18 return tmp;
19 }

//全角转换为半角函数
function ToCDB(str)
 {
 var tmp = "";
 for(var i=0;i<str.length;i++)
 {
 if(str.charCodeAt(i)>65248&&str.charCodeAt(i)<65375)
 {
 tmp += String.fromCharCode(str.charCodeAt(i)-65248);
 }
 else
 {
 tmp += String.fromCharCode(str.charCodeAt(i));
 }
 }
 return tmp
}

主题推荐
javascript 正则 编码 算法 数据
猜你在找
Javascript判断日文全角半角长度
javascript中全角转半角
javascript中全角转半角
用javascript判断字符是全角还是半角
HTMLJavascriptjavascript中全角转半角
半角全角的转换算法
JAVA正则替换字符串的全角半角标点符号
正则替换字符串的全角半角标点符号
正则替换字符串的全角半角标点符号
默认字符编码是UTF8的linux服务器java计算字符串长度半角算一个全角算两个
查看评论

  暂无评论

发表评论
  • 用 户 名:
  • ilvu999
  • 评论内容:
  • 插入代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多