明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: kozmosovia

[源码] LISP调用Jscript转义汉字,实现LSP/VLX跨越lispsys

  [复制链接]
发表于 2025-7-17 22:42:12 | 显示全部楼层
kozmosovia 发表于 2025-7-17 21:27
当lispsys=1时,结果就乱码了

lispsys设置为1或2;
都需要关闭CAD界面,重新打开才可以。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-17 22:49:21 | 显示全部楼层
437271963 发表于 2025-7-17 22:42
lispsys设置为1或2;
都需要关闭CAD界面,重新打开才可以。

你没有get到这样做的要点,是无论用户的CAD的lispsys设置是什么,lsp或者VLX代码都能正常运行。而无需先改一次lispsys再重启才能用。越来越多的新人用CAD都是高版本,未来也注定要向UTF过渡的。不可能死守必须要lispsys=0,lsp/vlx才能用。
回复 支持 反对

使用道具 举报

发表于 2025-7-18 07:07:52 | 显示全部楼层
kozmosovia 发表于 2025-7-17 22:49
你没有get到这样做的要点,是无论用户的CAD的lispsys设置是什么,lsp或者VLX代码都能正常运行。而无需先 ...

打开CAD,F1查看帮助搜索lispsys;
在程序里面想要拆分字串符,一般分3个情况进行拆分,就适应所有情况了。
  1. ;字串符str->拆分为单个"中文"->'("中" "文")
  2. (defun WZ_CF (str / str str2 strs)
  3. (setq strs '())
  4. (while (/= str "")
  5.   (cond
  6.    ((null (cadr (vl-string->list "中"))) (setq str2 (substr str 1 1) str (substr str 2)));中文也是一个字串符
  7.    ((> (ascii (substr str 1 1)) 128) (setq str2 (substr str 1 2) str (substr str 3)) );中文是两个字串符
  8.    (t (setq str2 (substr str 1 1) str (substr str 2)) );英文拆分
  9.   )
  10.   (setq strs (cons str2 strs))
  11. )
  12. (reverse strs)
  13. )

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-18 09:40:50 | 显示全部楼层
本帖最后由 kozmosovia 于 2025-7-18 09:45 编辑

运行的代码中带个汉字,如果lsp文件的编码和lispsys不匹配时,能100%正常运行会是拆盲盒靠运气了。要判断lispsys,直接getvar就行,不需要去string->list。
代码是自写自用倒是无所谓,如果要发给别人用,当别人的lispsys设置跟你的不一样时,用起来就会很麻烦:要么改lispsys,要么改lsp的编码。vlx改不了编码,只能改lispsys。而使用转义的方式,无论什么编码的lsp或者vlx,在无论什么lispsys上都可以正常运行。不需要用户为了用个命令非得改lispsys重启cad。

不转义的话,需要汉字时,就要做两个数字列表来替代,一个是lispsys=0时用,一个是lispsys=1时用。不觉得麻烦当然可以这么做:程序写好后再开个不同lispsys的CAD,获取汉字转出的对应数字列表是多少补充写入代码中。但是这么干可能还不如代码中直接保留汉字改编码来得快,唯一的限制是这种改法不支持VLX,改编码后还得再重新编译一个VLX。



本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-7-18 10:50:43 | 显示全部楼层
查了一下,在AutoCAD2021版本以下,需要你这个程序文字转义;
高版本的,不需要。
回复 支持 反对

使用道具 举报

发表于 2025-7-19 18:19:12 | 显示全部楼层
(if (= (getvar "lispsys") 1)
        (vl-list->string '(20154 27665 97 98 99 32452 32455 52 53 50 52 26426 26500 100 102 97 113 52 52))
        (vl-list->string '(200 203 195 241 97 98 99 215 233 214 175 52 53 50 52 187 250 185 185 100 102 97 113 52 52)))
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-20 17:11 , Processed in 0.154798 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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