Ascii和(vl字符串elt)给出
我想编写一个lisp,从模型空间读取文本并替换其中的一些字符。对于这项工作,我迭代每个字符并获取每个字符的Ascii码,然后在if-else中进行替换。在某些情况下,它会得到错误的答案。例如,字符“Þ”(拉丁文大写字母thorn)(Ascii代码:222或十六进制=\U+00DE)。(vl string elt“Þ”0)和(Ascii“Þ”)命令都给出了92,这是Ascii代码的结果
我使用doslib,但同样的问题也存在。
有人知道问题出在哪里吗? 你确定测试正确吗?
为了我:
_$ (ascii "Þ")
222 也许我有点奇怪。我试过XP SP3和win7(64),Acad2009、Acad2012和2011都给了我:
命令:(ascii“Þ”)
92 如果通过VLIDE控制台进行测试,会发生什么? 我真的很困惑:
_$Command:(ascii“Þ”)
92
无
222
92
_$(Ascii“Þ”)
222
_$(Ascii“Þ”)
222
_$(Ascii“Þ”)
222
在第一次运行中,VLIDE也感到困惑,在后来的运行中,它得到了真实的答案。
当我从charmap粘贴时,char变成问号并返回等价的ascii码,即63
_$(ascii?“”)
63
仍然在命令提示符中,显示为92。
我安装了第二种语言。这是原因吗? 首先,由于LISP不区分大小写,因此(Ascii)中的大写字母不会有任何区别。
现在:
此结果是因为您也将“Command:”复制到控制台,该命令被解释为空符号:
_$ Command: (ascii "Þ")
nil
222
_$ Command:
nil
不过,我不确定ASCII 92(反斜杠“\”)代码来自哪里。
至于:
_$ (ascii "?")
6363只是问号的ASCII码。LISP只能处理ASCII字符,因此复制到控制台中的任何Unicode字符都将转换为问号。 您的命令提示符中是否也有该命令? Command: (ascii "Þ")
222 如果我在下面的代码中遇到此类问题(我指的是这个字符和其他一些字符),txt1和txt2给出了不同的答案:
(setq item (ssname sset i))
(setq ed (entget item))
(setq VlObj (vlax-ename->vla-object item))
(setq txt2 (vla-get-textstring VlObj))
(setq txt1 (cdr(assoc 1 ed))) 是的,有一个已知的错误,扩展的ASCII和Unicode符号将替换为问号“?”使用VLA对象的TextString属性检索文本内容时。
当文本对象包含此类字符时,请始终使用DXF组码。
页:
[1]
2