鸟食轩

 Microsoft .NET[C#] MVP 2003
随笔 - 424, 文章 - 233, 评论 - 5418, 引用 - 344
数据加载中……

弥补Reflector反编译对中文支持的不足

    Reflector是我目前用的最多的反编译工具,他可能不时最好的,但以它的更新速度,我相信他会成为最好的哦~~
    国外的软件,对中文支持还是有问题,虽然我们都Unicode了,可是老外还是不一定认账。Reflector反编译代码,Unicode中非英文的字符都显示为了\u????,这本来还是对的,可是我们看起来就太郁闷了。Reflector支持Plug-in,曾经想写个插件,结果要了解的东西太多,就放弃了。不过问题也解决了,用VS.NET带的宏,haha

   转换前的代码,谁能看懂写的啥呀@_@?
   

    不要担心,转换后的代码就成了:
   

    VS.NET 宏代码,名称:Unicode2Character

Public Module Birdshome
   Sub Unicode2Character()
       Dim doc As Document = DTE.ActiveDocument
       Dim docText As TextDocument = doc.Object
       Dim selText As TextSelection = docText.Selection()
       selText.SelectAll()
       Dim text As String = selText.Text

       Dim iLength As Integer

       Do
           iLength = text.Length
           Dim m As Match
           Dim strPattern As String = "(?<code>\\[ux][A-F0-9]{2,4})"
           m = Regex.Match(text, strPattern, RegexOptions.IgnoreCase)
           If m.Success Then
               Dim strValue As String
               strValue = m.Groups("code").Value
               Dim digitLength As Integer = strValue.Length - 2
               text = text.Replace(strValue, "")
               Dimint As Integer
               int = System.Int32.Parse(strValue.Substring(2, digitLength), NumberStyles.HexNumber)
               Dim ch As Char = ChrW(int)

               docText.ReplacePattern(strValue, ch)
           Else
               Exit Do
           End If
           If Not text.Length < iLength Then
               Exit Do
           End If
       Loop
       selText.StartOfDocument()
   End Sub
End Module

enjoy it!

posted on 2004-08-31 00:55 birdshome 阅读(6304) 评论(30)  编辑 收藏 所属分类: .NET技术开发相关

评论

#1楼    回复  引用  查看    

我只能说 我真的非常佩服你!文章 还有方法!
2004-08-31 01:23 | 中国Rainbow      

#2楼    回复  引用    

Cool article and cool VS.NET :)
2004-08-31 10:44 | chagel [未注册用户]

#3楼    回复  引用  查看    

不错。
2004-08-31 11:34 | 寒星      

#4楼    回复  引用    

(?<code>\\u[a-f0-9]{4})
2004-08-31 15:05 | forever [未注册用户]

#5楼    回复  引用  查看    

You are right in C# programming, but VB Script is not case-sensitive.
2004-08-31 18:49 | birdshome      

#6楼    回复  引用    

这段宏代码是怎么用的啊?能不能详细介绍下使用的过程!
2004-08-31 19:45 | lion [未注册用户]

#7楼    回复  引用    

可以考虑用javascript+html写一个HTA
2004-09-06 01:42 | Rover [未注册用户]

#8楼    回复  引用    

能不能具体讲讲怎么使用
2005-01-10 06:30 | minray [未注册用户]

#9楼 [楼主]   回复  引用  查看    

目前最新版的Reflector 4.1.29.0,已经支持东亚语言了。
2005-01-10 23:17 | birdshome      

#10楼    回复  引用    

樓主NB!
2005-01-14 15:12 | szt [未注册用户]

#11楼    回复  引用    

re: 弥补Reflector对中文支持的不足
目前最新版的Reflector 4.1.29.0,已经支持东亚语言了。

--------------------------------------------------

有支持嗎,怎麼還是亂碼?
2005-01-14 16:03 | FT [未注册用户]

#12楼    回复  引用    

想不到还可以这样,我自已还为此专写了一个Unicode到中文转换的小工具呢! http://pdriver.com/blog/dibov/archive/2005/01/27/6066.aspx
2005-03-07 13:15 | Dibov [未注册用户]

#13楼 [楼主]   回复  引用  查看    

我记得我是看见一个版本支持中文了的,后来我也发现新的Reflector显示东亚语言又变回\u????格式了:( 不知道Reflector再搞什么飞机。
2005-06-24 16:29 | birdshome      

#14楼    回复  引用    

对呀,怎么用宏呀
2005-08-15 10:40 | ithunter [未注册用户]

#15楼    回复  引用  查看    

Reflector.FileDisassembler 4.1.70.0
这个插件提供源代码的,可以尝试改这个代码实现把Unicode编码保存为中文的,昨天晚上看了一下这个代码,没怎么仔细看,LZ看看撒。
2005-09-10 15:20 | 小渴      

#16楼 [楼主]   回复  引用  查看    

http://download.cnblogs.com/birdshome/archive/2005/04/18/139646.aspx
要转换不是很难,只是近来很难有这个需求,大多数有价值reflector的assembly本身都是英文版的。
2005-09-10 15:33 | birdshome      

#17楼    回复  引用    

不知怎么使用这个宏
2005-09-22 12:31 | 小刘 [未注册用户]

#18楼    回复  引用    

多谢了,这也算是个不错解决办法!!!
2006-02-16 01:50 | 吴 [未注册用户]

#19楼    回复  引用    

开源了 现在 大家可以自己改嘛
2006-03-03 21:41 | wxz [未注册用户]

#20楼    回复  引用    

挺好的啊 我太需要了
2006-06-10 07:17 | wuyun [未注册用户]

#21楼    回复  引用    

非常好。佩服。
不知能否将反编译的VB中的类似于ChrW(21306)的形式转变过来。
我考虑了一下,主要是对字符串前后的引号不太好处理。

您有何高见。

#22楼    回复  引用  查看    

最新版本中已经修复了这个bug
2007-05-20 01:48 | 代码乱了      

#23楼    回复  引用  查看    

楼主,希望你能帮我啊,我在网上找了很久,就只有你有相关的方法

我打开一个软件语言文件txt文本,看到里面的汉字全部用BigEndianUnicode代码表示,而我要得到的却是中文汉字,不知道该用什么软件或代码转换,请你帮帮我,真的很重要啊,我的邮箱是tiankongdahaigaoshan@126.com
我在网上搜索了很久,就看到你在(弥补Reflector反编译对中文支持的不足)有谈到这个问题,而我又不会编程,所以对你用VS.NET代码处理根本不懂,所以我希望你能帮我指点指点,或者是做一个exe文件,让我把文本文件拖进去,出来的就是中文的文本了,呵呵,期待你的回复

一下只是部分代码(都是txt格式的文本,希望把全部BigEndianUnicode代码转换成中文)
STRINGTABLE
{
  IDS_OUTWINDOW_FILE "\u6587\u4EF6";
  IDS_OUTWINDOW_EDIT "\u7F16\u8F91";
  IDS_OUTWINDOW_VIEW "\u89C6\u56FE";
 

  IDS_EDITOR_FILE "\u6587\u4EF6";
  IDS_EDITOR_EXPORT "\u8F93\u51FA...";
  IDS_EDITOR_EXPORTPREFS "\u8F93\u5165/\u8F93\u51FA\u8BBE\u7F6E";
  IDS_EDITOR_PRESETS "\u9884\u5236";
  IDS_EDITOR_EDIT "\u7F16\u8F91";
  IDS_EDITOR_OBJECTS "\u5BF9\u8C61";
  IDS_EDITOR_PRIMITIVE "\u539F\u59CB\u51E0\u4F55\u4F53";
  IDS_EDITOR_SPLINE_PRIMITIVE "\u539F\u59CB\u6837\u6761";
  IDS_EDITOR_NURBS "NURBS";
  IDS_EDITOR_MODELING "\u9020\u578B";
  IDS_EDITOR_SCENE "\u573A\u666F";
  IDS_EDITOR_PARTICLE "\u7C92\u5B50";
  IDS_EDITOR_DEFORMATION "\u53D8\u5F62";
  IDS_EDITOR_SOUND "\u58F0\u97F3";
  IDS_EDITOR_TOOLS "\u5DE5\u5177";
  IDS_EDITOR_ACTION "\u52A8\u4F5C";
  IDS_EDITOR_COORDINATES "\u5750\u6807";
  IDS_EDITOR_OPTIONS "\u529F\u80FD";
  IDS_EDITOR_STRUCTURE "\u6784\u9020";
  IDS_EDITOR_MODEL_TOOLS "\u6A21\u578B\u5DE5\u5177";
  IDS_EDITOR_CREATEMODIFY "\u521B\u5EFA\u4FEE\u6539";
  IDS_EDITOR_MODELTOOLS "\u6A21\u578B\u5DE5\u5177";
2008-05-01 08:22 | alexanderssky      

#24楼    回复  引用  查看    

楼主,希望你能帮我啊,我在网上找了很久,就只有你有相关的方法

2008-05-01 08:28 | alexanderssky      

#25楼 [楼主]   回复  引用  查看    

@alexanderssky
怎么你不能把我前面的Macro运行起来?
VS2005.png
Visual Studio 05/08都可以运行呀,你的代码片断转换后是:

STRINGTABLE
{
    IDS_OUTWINDOW_FILE "文件";
    IDS_OUTWINDOW_EDIT "编辑";
    IDS_OUTWINDOW_VIEW "视图";

    IDS_EDITOR_FILE "文件";
    IDS_EDITOR_EXPORT "输出...";
    IDS_EDITOR_EXPORTPREFS "输入/输出设置";
    IDS_EDITOR_PRESETS "预制";
    IDS_EDITOR_EDIT "编辑";
    IDS_EDITOR_OBJECTS "对象";
    IDS_EDITOR_PRIMITIVE "原始几何体";
    IDS_EDITOR_SPLINE_PRIMITIVE "原始样条";
    IDS_EDITOR_NURBS "NURBS";
    IDS_EDITOR_MODELING "造型";
    IDS_EDITOR_SCENE "场景";
    IDS_EDITOR_PARTICLE "粒子";
    IDS_EDITOR_DEFORMATION "变形";
    IDS_EDITOR_SOUND "声音";
    IDS_EDITOR_TOOLS "工具";
    IDS_EDITOR_ACTION "动作";
    IDS_EDITOR_COORDINATES "坐标";
    IDS_EDITOR_OPTIONS "功能";
    IDS_EDITOR_STRUCTURE "构造";
    IDS_EDITOR_MODEL_TOOLS "模型工具";
    IDS_EDITOR_CREATEMODIFY "创建修改";
    IDS_EDITOR_MODELTOOLS "模型工具";
2008-05-04 03:06 | birdshome      

#26楼    回复  引用  查看    

@birdshome
老大,还是不行啊,都不知道怎么回事,就是运行不了
2008-06-07 11:41 | alexanderssky      

#27楼    回复  引用  查看    

 

 问题还是没有解决啊,我把过程截了图片给你看看,是那里出了问题











希望能详细的帮我解答一下,万分感谢

2008-06-07 12:03 | alexanderssky      

#28楼 [楼主]   回复  引用  查看    

怎么会还没有成功啊???我都要晕倒了,,,你要修改一下模块名,改成和代码里的一样。。。
Public Module Birdshome
   Sub Unicode2Character()
       Dim doc AsDocument = DTE.ActiveDocument
       Dim docText AsTextDocument = doc.Object
       Dim selText AsTextSelection = docText.Selection()
       selText.SelectAll()
       Dim text As String = selText.Text
       Dim iLength As Integer
       Do
           iLength = text.Length
           Dim m As Match
           Dim strPattern AsString = "(?<code>\\[ux][A-F0-9]{2,4})"
           m = Regex.Match(text, strPattern, RegexOptions.IgnoreCase)
           If m.Success Then
               Dim strValue AsString
               strValue = m.Groups("code").Value
               Dim digitLength AsInteger = strValue.Length - 2
               text = text.Replace(strValue, "")
               Dimint As Integer
               int = System.Int32.Parse(strValue.Substring(2, digitLength),NumberStyles.HexNumber)
               Dim ch As Char = ChrW(int)
               docText.ReplacePattern(strValue, ch)
           Else
               Exit Do
           End If
           If Nottext.Length < iLength Then
               Exit Do
           End If
       Loop
       selText.StartOfDocument()
   End Sub
End Module
// 增加了对\x??这种形式的转换支持
2008-06-16 15:57 | birdshome      

#29楼    回复  引用    

这是哪个版本啊。没有见过。
还有那个宏怎么用啊
2008-07-04 17:27 | monster_DD [未注册用户]

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-16 16:41 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: