autoCAD2021支持unicode是如何实现的
本帖最后由 baitang36 于 2021-3-17 16:23 编辑autoCAD从2021版开始支持unicode,这功能有啥用呢?win10的记事本已经默认支持utf-8,自动桌子也要跟上步伐啊。
说白了,unicode的作用就是可以同时支持多国语言,如果你在一个句子里面要同时显示 简体、繁体、日文、韩文,那就要用到unicode了。
如果你的程序里面只有英文字母,没有汉字,没有日文、韩文,那utf-8格式的lsp和原来的ansi格式的lsp文件编译成fas后没有任何区别。
autoCAD2021支持unicode,也会付出很高代价,以后高版本的fas将不能在低版本使用,当然老的fas在新的cad下还是正常使用的。
打开cad的安装目录,也就是acad.exe所在的位置,可以看到vl开头的文件大多同时有两个差不多的文件名,一个是传统的,一个是新增的。如vl.arx,新增加了一个vl_u.arx。 有个vl.crx, 也有vl_u.crx.
vl.arx是不支持unicode的,vl_u.arx是支持unicode的。
也就是说桌子公司弄了两套vlisp,启动acad.exe时加载哪一套,由系统变量lispsys来决定.
lispsys=1,加载unicode版的vlisp;lispsys=0,加载传统版的vlisp。这也是为什么改了系统变量lispsys,需要重启cad才能生效的原因。
LISPSYS(系统变量)
控制使用 VLISP 命令启动的默认 AutoLISP 开发环境和编辑器。
类型:整数
保存位置:注册表
初始值:0
值说明
0Visual LISP IDE (VL IDE) 被设置为默认编辑器,AutoLISP 函数不完全支持 Unicode 字符。AutoLISP 源 (LSP) 文件在保存和编译时使用 ASCII (MBCS) 字符集。注意:此设置导致 AutoCAD 2020 和早期版本的行为,并且仅在 Windows 上受支持。
1Visual Studio (VS) Code 被设置为默认编辑器,AutoLISP 函数完全支持 Unicode 字符。AutoLISP 源 (LSP) 文件在保存时,使用在 VS Code 中设置的编码,在编译时,它们使用 Unicode 字符集。
2Visual Studio (VS) Code 被设置为默认编辑器,AutoLISP 函数完全支持 Unicode 字符。AutoLISP 源 (LSP) 文件在保存时,使用在 VS Code 中设置的编码,在编译时,它们使用 ASCII (MBCS) 字符集。
注意:更改 LISPSYS 系统变量的当前值后,必须重新启动 AutoCAD 才能切换 AutoLISP 开发环境。
baitang36 发表于 2021-3-17 17:09
确实如此,但发展趋势是用utf-8,桌子也在跟进
看不出有什么优势。
通常文档都是以一个语种为主,其它语种出现的数量很少。对于纯中文/英文文档,两种编码方式结果一样,没区别;对于中文文档中混杂的少量英文字符,节省的空间非常小;只有在英文文档中夹杂着少量中文,UTF-8才有优势。可是就实际应用而言,基本出现的是纯中文/英文/中文混英文三种方式,对于英文文档夹杂少量中文,主体文档英文就说明了读者是英文不懂中文的,这样文档中夹杂少量中文,读者看不懂啊,这种方式出现的概率应该是非常少的。
本帖最后由 baitang36 于 2021-3-17 16:30 编辑
mikewolf2k 发表于 2021-3-17 15:52
如果你的程序里面只有英文字母,没有汉字,没有日文、韩文,那utf-8和原来的ansi没有任何区别。
这句话 ...
你说的对,ansi格式的lsp和utf-8格式的lsp文件是不同的。
我的意思是想表达这两种格式的源码中如果只有纯英文,在lispsys=1时编译后的fas没有区别。
对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。
你是怎么发现这些的 本帖最后由 caoliu023 于 2021-3-17 16:47 编辑
我之前看见这些文件也很疑惑,感谢楼主为我们解惑。 你很厉害,请继续挖掘,看看如何利用cad2021自带的vs stadio kaifqlisp1 赞一个 jun353835273 发表于 2021-3-17 13:41
你是怎么发现这些的
别人给我一个不能反编译的fas,顺藤摸瓜,就跟到这里来了 UTF-8很麻烦,以前大量的不支持UTF-8的都可能出问题。在现在硬盘内存容量极大的情况下,UTF-8基本没好处。 如果你的程序里面只有英文字母,没有汉字,没有日文、韩文,那utf-8和原来的ansi没有任何区别。
这句话不对,文件前面会个标识符表明本文件的编码格式,是UTF-8还是ANSI,后面的字符部分才一样。文件头不一样。