项目中经常会遇到全角和半角的比较,最近碰到了一个这个方面就稍微研究了下!
问题大概是:出PDF的时候,一个项目里由两个不同域组合而成,但是两个域的位置必须固定,这个时候就比较痛恨老美设计的时候没有考虑中国文化的博大精深。一个英文和一个汉字说占用的位置不一样!
google了下解决方法(如何判断全角文字),发现了这么一段代码:
心里很是高兴,可是渐渐发现转化了ASCII码后,为什么>63就是全角文字了,原来作者钻了个空子,中文字符转化ASCII吗后不能识别全部都变成63,才回出现这样结果,但是如何碰上日文就麻烦了,全半角假名全部都是63无法识别!所以该方法谨慎使用!
静下心理清了下面几个关系,就不难想出解决方法了:
1 bit = 1 二进制数据
1 byte = 8 bit
1 字母 = 1 byte = 8 bit
1 汉字 = 2 byte = 16 bit
因此:汉字输入状态下的字符,占2个字节 (但不排除,自己更改了默认设置);
英文输入状态下的字符,占1个字节 (但不排除,自己更改了默认设置);
解决的方法应该是去判断有几个字节:
方法比较简单,仅供参考!
问题大概是:出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)
{
// 全角
}
}
方法比较简单,仅供参考!