找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 775|回复: 4

[讨论]:是否可以如此判断s是一个中文还是英文字?

[复制链接]
发表于 2003-10-29 18:06:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
(defun isCh ( s / s1)  
  (setq s1 (substr s 1 1)
          s1 (strcat s1 " " "*")
  )
(wcmatch s s1)
);endfun
是否可以如此判断s是一个中文还是英文字?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-10-29 20:36:28 | 显示全部楼层
可用“ASCII”函数试一试,该函数返回字符串中的第一个字符的ASCII值。如:
(ascii "A")             返回65
(ascii "汉")            返回214
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-10-30 00:46:53 | 显示全部楼层

Re: [讨论]:是否可以如此判断s是一个中文还是英文字?

最初由 libo2000 发布
[B](defun isCh ( s / s1)  
  (setq s1 (substr s 1 1)
          s1 (strcat s1 " " "*")
  )
(wcmatch s s1)
);endfun
是否可以如此判断s是一个中文还是英文字? [/B]


工具箱里的

  1. ;|
  2.    判断一个字符串里面是否包含汉字
  3. |;
  4. (defun $xdlsp_text_hashz (str / cha tf)
  5.   (setq tf nil
  6.         i 1
  7.   )
  8.   (while (and
  9.            (not tf)
  10.            (/= "" (setq cha (substr str i 1)))
  11.          )
  12.     (if (> (ascii cha) 159)
  13.       (setq tf t)
  14.     )
  15.     (setq i (1+ i))
  16.   )
  17.   tf
  18. )

ascii 值大于159就为汉字.
注意:如果是汉字就要读两个字节
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-10-30 08:49:13 | 显示全部楼层
准确的说,判断一个字符是否是汉字还是比较难的。汉字由两个字节组成,在GB_2312中定义了一、二级字库及部分特殊符号,两个字节的编码开始都在ascii码160位置,只需按此条件判断即可。GB_13000.1发布后编码大大扩展(就是我们使用的“宋体”等,包含大量生僻字符),汉字首个字符为“丂”,编码为“8140”,就是ascii码的129-064,如果考虑这些,判断时与西文字符有些冲突就需要解决。现在GB_18030已经发布,字符扩展到四字节,至今无法搞清楚,也不敢多讲。
总之,一般可以考虑按GB_2312判别,只是需要知道会有那些问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-3 15:24:03 | 显示全部楼层
同意楼上的说法
电脑这个东西本来就是老外,不支持汉字很正常,
支持了才不正常了呢。用Ascii吗来判断,怎么说都好象不对,
每一个都有可能是西文字,只是平常用的字很难涉及到而已,
老外为什么就不能定义160、161的两个连续的怪东西?
(defun isCh ( s / s1)
(setq s1 (substr s 1 1)
s1 (strcat s1 " " "*")
)
(wcmatch s s1)
);endfun
一般情况能判断他是否汉字,但是我不清楚
wcmatch函数的原理(判断ascii?),就不知道isCh到底正确不。

我写了几个中文的str_pos,str_insert,str_substr,都依靠它来判断,在一般情况下,看不出有问题,但总是觉得不塌实。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 20:50 , Processed in 0.309410 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表