/db_自贡黄明儒_ 发表于 2020-8-14 09:59:35

"改向滚筒\\U+03C6320"怎么转换成"改向滚筒φ320"?[已经解决]

本帖最后由 /db_自贡黄明儒_ 于 2020-8-15 12:15 编辑

"[\\\\U+0-9a-fA-F]{7}"怎么转换成对应的汉字?如"改向滚筒\\U+03C6320"怎么转换成"改向滚筒φ320
望各位大师指教!在此表示感谢先。现在世风日下,没有人帮忙解决。只好自己动手了,解决办法是:**** Hidden Message *****

Lisphk 发表于 2020-8-14 21:43:15

把+好替换成"", 然后在正则

WhoCanSay 发表于 2020-8-14 21:49:00

具体怎么做?

Lisphk 发表于 2020-8-14 21:50:55

WhoCanSay 发表于 2020-8-14 21:49
具体怎么做?
你用代码 能得到 \\U+ 这样的内容吗?
还是你在屏幕看的?
把你的乱码DWG传上来吧。

huangpc27 发表于 2020-8-15 07:50:28

不太清楚怎么弄了

/db_自贡黄明儒_ 发表于 2020-8-15 08:08:24

本帖最后由 /db_自贡黄明儒_ 于 2020-8-15 08:13 编辑

Lisphk 发表于 2020-8-14 21:50
你用代码 能得到 \%u+ 这样的内容吗?
还是你在屏幕看的?
把你的乱码DWG传上来吧。使用(entget e)会得到\\U+ 这样的内容.
奇怪,我怎么经常遇到这样的图。这是设计院的图,φ°是我打上去的。目前我的解决方案是:

(defun XD::Text:UnFormat (str / m1 match)
(setq match "%%o|%%O|%%U|%%u|%%140|%%141|%%142|%%143|%%k|%%K");上下划线、上下标
(setq str (XD::String:Replace match str "" ""))
;;(setq str (XD::String:Replace "[\\\\U+0-9a-fA-F]{7}" str "" ""))
(while (VL-STRING-SEARCH "\\U+03C6" str)
    (setq str (vl-string-subst "φ" "\\U+03C6" str))
)
(while (VL-STRING-SEARCH "\\U+03b4" str)
    (setq str (vl-string-subst "δ" "\\U+03b4" str))
)
(while (VL-STRING-SEARCH "\\U+00B0" str)
    (setq str (vl-string-subst "°" "\\U+00B0" str))
)
(setq str(XD::String:Replace "%%c" str "φ" ""))
(setq str(XD::String:Replace "%%C" str "φ" ""))
(setq str(XD::String:Replace "%%d" str "°" ""))
(setq str(XD::String:Replace "%%D" str "°" ""))
(setq str(XD::String:Replace "%%p" str "±" ""))
(setq str(XD::String:Replace "%%P" str "±" ""))
)

我使用的05版,高版本下(princ "改向滚筒\\U+03C6320")可以直接显示"改向滚筒φ320"

jshailinqq 发表于 2020-8-15 08:40:22

是不是字符集问题,这个应该是Unicode字符集

q3_2006 发表于 2020-8-15 13:32:28

我来捧场,现在回问题的人真少

Lisphk 发表于 2020-8-15 15:13:13

/db_自贡黄明儒_ 发表于 2020-8-15 08:08
使用(entget e)会得到\%u+ 这样的内容.
奇怪,我怎么经常遇到这样的图。这是设计院的图,φ°是我打上去的 ...

05不支持UNICODE

/db_自贡黄明儒_ 发表于 2020-8-15 15:36:33

Lisphk 发表于 2020-8-15 15:13
05不支持UNICODE
但是05我自己的图,不出现unicode

584817757 发表于 2020-8-15 17:59:47

(defun C:tt ( / i obj)
(setq ss (ssget "X" '((0 . "*Text"))))
(setq i 0)
(repeat (if (null ss) 0 (sslength ss))
(setq obj (vlax-ename->vla-object (ssname ss i)))
(setq str (vla-get-TextString obj))
(vla-put-TextString obj (unicode_ansi str))
(setq i (1+ i))
)
(princ)
)

(defun unicode_ansi (str / pos str_old str_new)
(if (not MSS)
(progn
   (setq MSS (vla-GetInterfaceObject (vlax-get-acad-object) "ScriptControl"))
   (vlax-put-property MSS "language" "vbs")
   (vlax-invoke-method MSS 'ExecuteStatement "SetLocale(\"zh-cn\")")
)
)
(setq pos (vl-string-search "\\U+" str))
(while pos
(setq str_old (substr str (+ pos 1) 7))
(setq str_new (vla-eval MSS (strcat "Chrw(\&H" (substr str_old 4 4) ")")))
(setq str (vl-string-subst str_new str_old str pos))
(setq pos (vl-string-search "\\U+" str pos))
)
(eval str)
)

muwind 发表于 2020-8-22 23:04:40

本帖最后由 muwind 于 2020-8-22 23:19 编辑

前段时间我在明经问过类似的问题,我这边是cad2010原始版本的问题,
http://bbs.mjtd.com/thread-171570-1-1.html
http://bbs.mjtd.com/thread-172099-3-1.html
我估计楼主是不是也是用cad2010的原始版本(不带update2那个版本)保存后造成的问题,用lisp操作文字也有问题
如果是打了补丁,保存后有时候会有问题,大部分都没问题,用lisp操作文字也基本没有任何问题。
为此我专门给公司(公司打死不更新cad版本,不安装补丁)调整了代码

不带补丁的版本还有个问题就是无论你怎么在lisp里面改,到了cad里面就会有改回去
要取出来计算什么的都需要用替换法把符号替换掉。
我采用的方式不管神马符号全部替换成某种不是数字和小数点的符号,然后取出里面的数字进行计算

muwind 发表于 2020-8-22 23:35:48

一般很少人注意这个问题,我在很早前就明经问过。很早很早以前cad官网有个版本转换软件(名字我忘了)会把所有的字符转为unicode代码,因此再也没用那个转换软件。后来我发现cad2010的原始版本(未打补丁的版本)也有这个问题,16年在明经问过,当时用cad2010的同事开始多起来了,不过我发现打了补丁update2就基本没问题了,所以就没管了。代码也没重干,今年必须要重写代码(上次写是10多年前了)又问了次,最后也是替换法解决了。
不过只要是在cad2010的原始版中这个问题就一直存在无法彻底解决,除非打个update2的补丁,

/db_自贡黄明儒_ 发表于 2020-8-27 08:06:12

muwind 发表于 2020-8-22 23:35
一般很少人注意这个问题,我在很早前就明经问过。很早很早以前cad官网有个版本转换软件(名字我忘了)会把 ...

英文版可能都存在这个问题。

ccc230 发表于 2020-9-4 17:45:57

正好要的!!!!!!
页: [1] 2
查看完整版本: "改向滚筒\\U+03C6320"怎么转换成"改向滚筒φ320"?[已经解决]