多行文本出现内容变成特字符,有办法变回原内容吗。
本帖最后由 wgij007 于 2021-8-13 07:46 编辑原内容: Q235冷板 T2.0
变成:Q235\U+51B7\U+677F T2.0
在图内看的还是原内容,只有在特性里才有区别. 谢谢。
双击编辑,不用改任何东东,按确定退出也可以恢复。
功能:能框选,内容变回实际内容,内容不单单是上面那些,只是举例。
谢谢
没必要改,既不影响看图也不影响修改。
要改的话还要写程序批量转换。 双击编辑还是文字吧?全选复制到记事本,再复制粘贴回去 这是ACAD的代码页跟WINDOWS的不一致而已,UTF-8什么的,建议不要改。在一致的机器上显示是正确的。
这个问题,在近20年前常见,还有专门工具转换。近年来基本看不到了。是不是WIN10? 主要是替代文本时有问题,有些变了,有些又没变。
(defun c:fmt(/ d dn e i s)
(setvar "cmdecho" 0)
(princ "\Fmt 〓 清除多行文字格式")
(setq i -1)
(if(setq s(ssget '((0 . "mtext"))))
(repeat (sslength s)
(setq d(entget(setq e(ssname s(setq i (1+ i))))))
(setq dn(subst(cons 1(LM:UnFormat(cdr(assoc 1 d))nil))(assoc 1 d)d))
(entmod dn)
)
)
(prin1)
)
(defun LM:UnFormat (str mtx / _replace rx)
(defun _replace (new old str)
(vlax-put-property rx 'pattern old)
(vlax-invoke rx 'replace str new)
)
(if (setq rx (vlax-get-or-create-object "VBScript.RegExp"));引入正则表达式
(progn
(setq str
(vl-catch-all-apply
(function
(lambda ()
(vlax-put-property rx 'global actrue)
(vlax-put-property rx 'multilineactrue)
(vlax-put-property rx 'ignorecase acfalse)
(foreach pair
'(
("\032" . "\\\\\\\\")
(" " . "\\\\P|\\n|\\t")
("$1" . "\\\\(\\\\)|\\\\[^\\\\;]*;|\\\\")
("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
("$1$2" . "\\\\(\\\\S)|[\\\\](})|}")
("$1" . "[\\\\]({)|{")
)
(setq str (_replace (car pair) (cdr pair) str))
)
(if mtx
(_replace "\\\\" "\032" (_replace "\\$1$2$3" "(\\\\)|({)|(})" str))
(_replace "\\" "\032" str)
)
)
)
)
)
(vlax-release-object rx)
(if (null (vl-catch-all-error-p str))
str
)
)
)
) 本帖最后由 wgij007 于 2021-7-21 17:38 编辑
xtjd 发表于 2021-7-5 11:09
(defun c:fmt(/ d dn e i s)
(setvar "cmdecho" 0)
(princ "\Fmt 〓 清除多行文字格式")
这个不是多行文字格式。 这是文本来的,图里看得是正常文本。编辑才看到\U+51B7 是冷字。\U+677F 是板字
(vl-string-translate "\\" "\\\\" "Q235\U+51B7\U+677F T2.0")->"Q235冷板 T2.0" 不是针对这个,是所有这种情况的文本改回,双击编辑按确定也可以的,我要的是批量处理。 顶一下。
页:
[1]
2