在 Delphi 中判断一个字符是中文的方法
2017-01-25 00:12
281 查看
由于 Delphi2005 支持中文标识符,在编写 PASCAL 词法分析器的过程中遇到了这个问题,经过多次试验找到了解决方案,至今未发现问题。
代码如下:
2005年1月28日:感谢滚龙的指点
![](http://blog.csdn.net/Emoticons/thumbs_up.gif)
,已将代码改写如下:
2005年1月31日:谢谢滚龙再次赐教,代码已收藏!
一些感想:这应该就是正规军和游击队之间的差别了,正规军打仗讲究全局、战法、配合和协同;游击队战场狭小,眼界有限,条件落后,为了打鬼子经常用一些土办法。还好现在有了网络,要不然像我这样的业余爱好者就真的只能闭门造车了。
本文引用通告地址: http://blog.csdn.net/wlnh_2004/services/trackbacks/270866.aspx [点击此处收藏本文]
发表于 2005年01月27日 6:11 PM
无人评价本文。
需要 登录 才可以评价。
请参看StrUtils.ByteType函数
滚龙 发表于2005-01-30 10:21 PM
你的函数有问题,如果传入的是双字节的后面一个,岂不是被误认为英文了?
顺便说一下,你的代码不够明确和简练,而且风格不太好,在调试或查阅的时候会带来麻烦。
下面是我针对这个功能写的函数,仅供参考!
function IsMBCSChar(const ch: Char): Boolean;
begin
Result := (ByteType(ch, 1) <> mbSingleByte);
end;
滚龙 发表于2005-01-31 9:02 PM
还有一个问题,你的注释!
这个函数不是判断字符是否为汉字,而是判断数否为多字节字符的一部分。这不仅适用于汉字,也适用于比如日文、韩文等。我想你的CodeColor也不希望仅仅局限于处理汉字吧~
这虽然是很不起眼的一点,但是日后查看代码或者给他人查看代码,别人往往会直接通过注释来了解这个函数的功能,那么就会比较直观的犯一个错误:这个函数只能处理汉字。
可能是我比较追求完美,要求比较苛刻,希望别见怪!因为我觉得中国软件质量要提高,就得从这些点点滴滴开始积累!
悄然无声 发表于2005-01-31 11:17 PM
TO 滚龙:
能得到你这样的高手指点倍感荣幸!说起第一个函数的来历你别笑我,我把编码 1 到 100000 的字符全列了出来,从中间找到连续汉字的区间,所以我说是“通过实验找到了解决方法”。
您可能无法理解一个业余编程者的遇到问题时的窘况。当时这个问题要是不解决,我的程序就不能正常工作,所以我只能采取“不管白猫黑猫,先给我抓住老鼠再说”的方法。
通过您的几次指点,我已经决定把 CodeColor 源码公开,让所有高手来改进并增加新的功能,到时候您可一定要来呀!
http://www.cnblogs.com/myqiao/archive/2005/08/29/225527.html
代码如下:
//判断字符是否是汉字 function IsHZ(ch: WideChar): boolean; var i:integer; begin i:=ord(ch); if( i<19968) or (i>40869) then result:=false else result:=true; end; |
![](http://blog.csdn.net/Emoticons/thumbs_up.gif)
,已将代码改写如下:
//判断字符是否是汉字 function TForm1.IsHZ(ch: Char): boolean; begin //返回值为 0 的时候为单字节字符,返回值为 1 的时候为多字节字符 if(ord(bytetype(ch,1))=1) then result:=true else result:=false; end; |
//┏━━━━━━━━━━━━━━┓ //┃代码着色:CodeColor v1.0 ┃ //┃来自:悄然无声的 Blog┃ //┗━━━━━━━━━━━━━━┛ //判断字符是否是汉字 function IsMBCSChar(const ch: Char): Boolean; begin Result := (ByteType(ch, 1) <> mbSingleByte); end; |
本文引用通告地址: http://blog.csdn.net/wlnh_2004/services/trackbacks/270866.aspx [点击此处收藏本文]
发表于 2005年01月27日 6:11 PM
无人评价本文。
需要 登录 才可以评价。
滚龙 发表于2005-01-28 7:50 PM
请参看StrUtils.ByteType函数
滚龙 发表于2005-01-30 10:21 PM
你的函数有问题,如果传入的是双字节的后面一个,岂不是被误认为英文了?
顺便说一下,你的代码不够明确和简练,而且风格不太好,在调试或查阅的时候会带来麻烦。
下面是我针对这个功能写的函数,仅供参考!
function IsMBCSChar(const ch: Char): Boolean;
begin
Result := (ByteType(ch, 1) <> mbSingleByte);
end;
滚龙 发表于2005-01-31 9:02 PM
还有一个问题,你的注释!
这个函数不是判断字符是否为汉字,而是判断数否为多字节字符的一部分。这不仅适用于汉字,也适用于比如日文、韩文等。我想你的CodeColor也不希望仅仅局限于处理汉字吧~
这虽然是很不起眼的一点,但是日后查看代码或者给他人查看代码,别人往往会直接通过注释来了解这个函数的功能,那么就会比较直观的犯一个错误:这个函数只能处理汉字。
可能是我比较追求完美,要求比较苛刻,希望别见怪!因为我觉得中国软件质量要提高,就得从这些点点滴滴开始积累!
悄然无声 发表于2005-01-31 11:17 PM
TO 滚龙:
能得到你这样的高手指点倍感荣幸!说起第一个函数的来历你别笑我,我把编码 1 到 100000 的字符全列了出来,从中间找到连续汉字的区间,所以我说是“通过实验找到了解决方法”。
您可能无法理解一个业余编程者的遇到问题时的窘况。当时这个问题要是不解决,我的程序就不能正常工作,所以我只能采取“不管白猫黑猫,先给我抓住老鼠再说”的方法。
通过您的几次指点,我已经决定把 CodeColor 源码公开,让所有高手来改进并增加新的功能,到时候您可一定要来呀!
http://www.cnblogs.com/myqiao/archive/2005/08/29/225527.html
相关文章推荐
- 在 Delphi 中判断一个字符是中文的方法
- 在 Delphi 中判断一个字符是中文的方法
- delphi判断一个字符是否为汉字的最佳方法
- Delphi判断一个字符是否为汉字的最佳方法[转]
- Delphi判断一个字符是否为汉字的最佳方法
- Delphi判断一个字符是否为汉字的最佳方法
- Java中判断字符为中文的方法
- java中判断字段真实长度(中文2个字符,英文1个字符)的方法
- 怎样判断一个字符是否为中文字
- java中判断字段真实长度(中文2个字符,英文1个字符)的方法
- java socket通信时,中文字符乱码的一个解决方法
- JAVA中判断字符是否为中文的方法
- 为项目中的URL中文参数,使用的加密类,包含判断字符是否是中文的方法
- 判断一个字符是否为汉字的最佳方法[转]
- python判断有中文字符的方法
- 判断一个字符串里是否有中文字符
- C# 判断中文字符的8种方法
- 如果判断一个字符是西文字符还是中文字符
- php 判断是否有中文字符的两种方法
- C# 判断中文字符的8种方法