xshrimp 发表于 2010-7-29 11:01:00

[原创]cad2011文字以\中文bug的修复!

&nbsp;&nbsp;<b>修复大部分乱码文字,只有个别无法处理..xshrimp &nbsp;2010.7.29</b><div>&nbsp;</div>

yeamean 发表于 2010-7-29 13:53:00

这么牛的小程序?收藏了

crystalboy 发表于 2010-7-29 19:15:00

我发了电子邮件给autodesk成都办事处,叫他们将我的电子邮件转发给北京的商务部,现在还在等待结果,你这个是临时的解决方法,还是希望官方的解决方案,不过,真的很感谢你,你的响应速度比autodesk快多了,我发现这个bug的当天就给成都办事处打了电话的,他们最初给我的回复是不修复这个bug,后来我打电话给了北京autodesk的商务部,他们叫我发电子邮件给他们,他们处理,不知道结果怎么样,等待中。。。。。。。谢谢你的解决方案,谢谢。

jeepsheep 发表于 2010-7-30 10:16:00

感谢分享

e2002 发表于 2010-7-30 14:15:00

&nbsp;\U+FF 后面跟随的应该是两位数的16进制 (10进制从0~255)吧?<br/>直接获取此两位字符后,转码hex2dec 为 10进制数再 chr 一次就可以了吧?改为 ssget 方式批量处理更好些.<br/><br/>另外此程序只能处理字符串中第一处乱码,后面的没有处理,建议改进循环控制,一次全部修正乱码<br/>

e2002 发表于 2010-7-30 16:53:00

本帖最后由 作者 于 2010-8-3 15:13:12 编辑 <br /><br /> 修改了一下,结果还是有问题, 程序流程似乎正常,但不同位置情况的 "*\汉字*" 处理结果依然有些异常,请教大家如何修正?<br/><br/><br/>这是2004中的正常状态:<br/> <br/><br/>这是2011中使用本程序修正后的状态(图中云线是处理后依然有问题之处):<br/><br/>

e2002 发表于 2010-7-30 17:10:00

&nbsp;调试中发现 使用 vla-object 方式访问到对象的 TextString 值和直接 entget 方式获得的值是不同的, entget 获得的TextString 中含有 "\\U+FF" 代码 ,vla-object方式没有,故不能用vla-object获得的TextString来判断是否存在乱码...<br/><br/><br/>

e2002 发表于 2010-7-30 17:13:00

没看懂楼主程序中的 "\\U+00" 和 "\\M+5", 请教楼主其具体含意?谢谢!

xshrimp 发表于 2010-7-31 16:22:00

没什么,有些乱码是无法复原的.这个才是真正的bug<div>例如 &nbsp;"\错误" &nbsp; 输入后2004打开依然为乱码.这个是无法修复的.</div>

xshrimp 发表于 2010-7-31 17:09:00

本帖最后由 作者 于 2010-8-2 8:51:49 编辑 <br /><br /> <p class="MsoNormal"></p><p class="MsoNormal">cad中文本 "\乱码演示"</p>

<p class="MsoNormal">(vl-string-&gt;list<span style="mso-spacerun:yes">&nbsp; "\\</span>乱码演示") -&gt;<span style="color:red"> (92 194 210 194 235 209 221 202 190) </span>这个是正确的数据.<o:p></o:p></p>

<p class="MsoNormal">2004中无论用entget或者vla方式获取的都是"\\乱码演示"</p>

<p class="MsoNormal"><o:p>&nbsp;</o:p></p>

<p class="MsoNormal">2010</p>

<p class="MsoNormal">1.vla方法:</p>

<p class="MsoNormal">(vl-string-&gt;list&nbsp;(vla-get-TextString<span style="mso-spacerun:yes">&nbsp; (vlax-ename-&gt;vla-object (car
(entsel)))))</span></p>

<p class="MsoNormal">-&gt;(92
63 210 194 235 209 221 202 63)</p>

<p class="MsoNormal">对比一下.正确(92<span style="mso-tab-count:1">&nbsp;194 &nbsp;210 194 235 209 221 202 &nbsp;&nbsp;190)</span></p>

<p class="MsoNormal"><span style="mso-tab-count:1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span>错误(92 <span style="mso-spacerun:yes">&nbsp;63&nbsp; 210 194 235 209 221
202 &nbsp;&nbsp;63 &nbsp;)</span></p>

<p class="MsoNormal"><span style="mso-tab-count:1">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>估计根据这个数据无法恢复...</p><p class="MsoNormal"></p><p class="MsoNormal">2.entget方法:</p>
<p class="MsoNormal">(vl-string-&gt;list<span style="mso-spacerun: yes">&nbsp; (cdr (assoc 1 (entget (car (entsel))))))
</span></p>
<p class="MsoNormal">-&gt;(92 92 85 43 70 70 67 50 210 194 235
209 221 202 92 85 43 48 48 66 69)<br/><br/></p><p class="MsoNormal"><br/></p><p class="MsoNormal"></p><p class="MsoNormal">根据上述对比方法写的修正程序.此为
"\\U+00" 和
"\\U+FF" 出处.<br/><br/></p><p class="MsoNormal">有些文字即使在cad2004中也无法修复.例如文字"\错误"等...</p><p></p><p></p><p></p>
页: [1] 2
查看完整版本: [原创]cad2011文字以\中文bug的修复!