明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4948|回复: 16

[LISP]怎么样判断汉字?

  [复制链接]
发表于 2006-6-23 23:12 | 显示全部楼层 |阅读模式

如题:例 (setq strA "汉字") (setq strB "HanZi")

请问怎么判断 strA 为汉字 strB不为汉字??

谢谢.....

发表于 2006-6-24 11:00 | 显示全部楼层

ASCII 码  
27 ESC 32 SPACE 33 ! 34 " 
35 # 36 $ 37 % 38 & 
39 ' 40 ( 41 ) 42 * 
43 + 44 ' 45 - 46 . 
47 / 48 0 49 1 50 2 
51 3 52 4 53 5 54 6 
55 7 56 8 57 9 58 : 
59 ; 60 < 61 = 62 > 
63 ? 64 @ 65 A 66 B 
67 C 68 D 69 E 70 F 
71 G 72 H 73 I 74 J 
75 K 76 L 77 M 78 N 
79 O 80  81 Q 82 R 
83 S 84 T 85 U 86 V 
87 W 88 X 89 Y 90 Z 
91 [ 92 \ 93 ] 94 ^ 
95 _ 96 ` 97 a 98 b 
99 c 100 d 101 e 102 f 
103 g 104 h 105 i 106 j 
107 k 108 l 109 m 110 n 
111 o 112 p 113 q 114 r 
115 s 116 t 117 u 118 v 
119 w 120 x 121 y 122 z 
123 { 124 | 125 } 126 ~

以上为各种字符的ASCII码,用ASCII函数遍历字符串中的每个字符,如果其值超出这个范围的即为汉字,当然还有可能为其他文字,如日文等,汉字的ASCII码好象有一个专门的范围,分什么区位码,没研究过.

发表于 2006-6-24 11:53 | 显示全部楼层

(if (>  (ascii str) 160)

    汉字

  

发表于 2006-6-24 16:00 | 显示全部楼层
(ascii "δ") →166    (ascii "★") →161 (ascii "≈") →161   (ascii "→") →161 (ascii "э") →167  显然这5个不是汉字
 楼主| 发表于 2006-6-24 19:11 | 显示全部楼层
为什么不是128呢???我怀疑是128呢,但没有证据............
发表于 2006-6-24 21:23 | 显示全部楼层
就是128了!
发表于 2006-6-25 14:59 | 显示全部楼层

这个问题说起来比较复杂,在计算中,一个字符用一个八为二进制表示,称为一个字节.共有256个状态.前128个已经定义为标准的ASCII码.

后128后用语非拉丁系双字节模式.如中文\日文\韩文等,一般用两个字节表示一个字.

在汉字系统中,汉字及其各种双字节符号由两个大于160的扩充ASCII码表示,为了表示方便.用第一个字节的ASCII码减去160称为区码,用第二个字节的ASCII码减去160称为位码,

区码和位码各有94个.

汉字系统的分区中,第一区表示标准的标点符号,第二区是各种序号,第三区是标准ASCII玛,第六区是西腊字母,第九区是制表符.

大于16区以上为汉字区.

故判断方法是:

(if (> (asscii str) 175)

     汉字

 

点评

yxp
这明显是错误的,详见17楼  发表于 2013-7-4 23:10
 楼主| 发表于 2006-6-25 18:44 | 显示全部楼层

(Defun C:test ()
  (setq str "在汉字系统中汉字及其各种双字节符号由两个大于的扩充码表示为了表示方便用第一个字节的码减去称为区码用第二个字节的码减去称为位码")
  (setq i 1)
  (repeat (fix (* (strlen str) 0.5))
    (setq code (substr str i 2)
   i    (+ 2 i)
    )
    (princ "\n")
    (princ code)
    (princ "  ---------- ")
    (princ (ascii code))
  )
  (prin1)
)

确实没有小于 175 的,

谢谢 wzz1968

请问 wzz1968 大侠 你是怎么知道这个东西的啊,哪里的资料,

 

点评

yxp
17楼  发表于 2013-7-4 23:10
发表于 2006-6-27 07:56 | 显示全部楼层

回答楼上的:

这是非常基础的计算知识.现在估计找不到这样的资料了,能说清楚这个人也不多.

 

发表于 2011-5-26 09:09 | 显示全部楼层
(Defun C:test ()
  (setq  str (getstring " 输入需要判断ASCII码的字符:"))
  (setq i 1)
  (repeat (fix (* (strlen str) 0.5))
    (setq code (substr str i 2)
   i    (+ 2 i)
    )
    (princ "\n")
    (princ code)
    (princ "  ---------- ")
    (princ (ascii code))
  )
  (prin1)
)

略作修改,这样更方便查看

点评

yxp
直接 vl-string->list 是不是快些?  发表于 2013-7-4 23:12
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-6-2 11:52 , Processed in 0.151496 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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