全角文字判断

项目中经常会遇到全角和半角的比较,最近碰到了一个这个方面就稍微研究了下!

问题大概是:出PDF的时候,一个项目里由两个不同域组合而成,但是两个域的位置必须固定,这个时候就比较痛恨老美设计的时候没有考虑中国文化的博大精深。一个英文和一个汉字说占用的位置不一样!

google了下解决方法(如何判断全角文字),发现了这么一段代码:

System.Text.ASCIIEncoding n = new System.Text.ASCIIEncoding();
byte[] b = n.GetBytes(str);
for (int j = 0; j < b.Length; j++)
{
if (b[j] >= 63)
{
全角文字
}
}

心里很是高兴,可是渐渐发现转化了ASCII码后,为什么>63就是全角文字了,原来作者钻了个空子,中文字符转化ASCII吗后不能识别全部都变成63,才回出现这样结果,但是如何碰上日文就麻烦了,全半角假名全部都是63无法识别!所以该方法谨慎使用!

静下心理清了下面几个关系,就不难想出解决方法了:
1 bit = 1 二进制数据
1 byte = 8 bit
1 字母 = 1 byte = 8 bit
1 汉字 = 2 byte = 16 bit
因此:汉字输入状态下的字符,占2个字节 (但不排除,自己更改了默认设置);
英文输入状态下的字符,占1个字节 (但不排除,自己更改了默认设置);

解决的方法应该是去判断有几个字节:

for (int i = 0; i < str.Length; i++)
{
String cutStr = str.Substring(i, 1);
if (ASCIIEncoding.Default.GetByteCount(cutStr) == 2)
{
// 全角
}
}


方法比较简单,仅供参考!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值