原文:02、Unicode 汉子转码小工具

在做 Windows app 的时候,与服务器端交互使用的是 json 格式的数据,里面的汉字内容被

编码成 unicode 格式,在调试的时候不太方便,就写了个工具,把里面的 unicode 内容转换成

汉字,方便调试。这个小工具是几个月前写的了,放在公司电脑的磁盘上,在其它地方使用时,

有点麻烦。就放到自己的博客里了。

这个工具很简单,运行截图:

1、在 xaml 页面中,放置两个 WebBrowser 控件,左侧用来显示 unicode 字符串,右侧显示转码后的结果。之所以使用浏览器控件,

而不直接使用 TextBlock 控件(或 TextBox),是因为这些 Wpf 控件对文字的复制、粘贴操作不能直接使用。

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<WebBrowser x:Name="webSource" Grid.Column="0"/> <Button Content="转换" Click="Button_Click" Height="100"
HorizontalAlignment="Center" Grid.Column="1"
VerticalAlignment="Top" Margin="10"/> <WebBrowser x:Name="webResult" Grid.Column="2"/>
</Grid>

2、在 WebBrowser 控件使用的 html 字符串中,放置一个 textarea 表单控件,并把它 css 样式 width、height 设置为 100%。

在构造函数中,默认显示测试文本内容:

 public MainWindow()
{
InitializeComponent(); // 需要指定为 utf-8 编码,否则默认为 gb-2312
string html = @"<html><head><meta charset=""utf-8""></head><body><textarea id=""txtArea"" style=""width:100%;height:100%"">" + strS + "</textarea></body></html>"; webSource.NavigateToString(html);
} // 示例数据
string strS = @"{""code"":200,""description"":""\u7b2c\u4e8c\u5b63\u4e2d\uff0c\u7434\u5b50\u7ec8\u4e8e\u7ed3\u675f\u4e86\u5bf9\u76f4\u6811\u7684\u5355\u604b\uff0c\u4e8c\u4eba\u7ed3\u5a5a\u540e\u76f4\u6811\u8fd8\u662f\u4e00\u76f4\u4fdd\u6301\u7740\u51b7\u9759\u7684\u6027\u683c\uff0c\u4e3a\u4e86\u80fd\u5728\u672a\u6765\u7684\u4e8b\u4e1a\u4e0a\u5e2e\u4e0a\u76f4\u6811\u7684\u5fd9\uff0c\u7434\u5b50\u8fdb\u5165\u4e86\u62a4\u58eb\u5b66\u6821\u5b66\u4e60\uff0c\u540c\u65f6\u5728\u8fdb\u5165\u5927\u5b66\u5b66\u4e60\u533b\u79d1\u7684\u76f4\u6811\u9762\u524d\u51fa\u73b0\u4e86\u5f3a\u52b2\u7684\u5bf9\u624b\u8239\u6d25\u8bda\u4e00\u3002\u540c\u65f6\u5728\u7b2c\u4e00\u90e8\u4e2d\u5355\u604b\u7434\u5b50\u7684\u91d1\u4e4b\u52a9\u5728\u7eed\u7bc7\u4e2d\u4e5f\u6536\u83b7\u4e86\u81ea\u5df1\u7684\u604b\u60c5\uff0c\u4ed6\u4e0e\u6765\u81ea\u5916\u56fd\u7684\u7559\u5b66\u751f\u514b\u4e3d\u4e1d\u5f00\u59cb\u4e86\u4e00\u6bb5\u5168\u65b0\u7684\u604b\u7231\u3002}";

3、WebBrowser 控件有一个 Document 属性,表示的是 “所承载的 HTML 页的文档对象”。因为它是 object 类型的,

不能直接通过该属性获得 html 的 dom 树内容(比如 o.body.innerHTML 获得 body 里面的标签内容)。 需要额外添加

Microsoft.mshtml 程序集,并引入 mshtml.HTMLDocument 类型。

按钮的单击事件代码:

        private void Button_Click(object sender, RoutedEventArgs e)
{
// 获取表示所承载的 HTML 页的文档对象。
mshtml.HTMLDocument o = webSource.Document as mshtml.HTMLDocument; // 使用 mshtml.HTMLDocument 需要添加 Microsoft.mshtml 程序集引用 // 通过 HTMLDocument 对象,直接获得 html 的dom 树内容,
// 并把内容 转换为 汉字
string strResult = ToChinsesWord(o.body.innerHTML); // 需要指定为 utf-8 编码,否则默认为 gb-2312
string html = @"<html><head><meta charset=""utf-8"">
</head><body>" +
strResult
+ "</body></html>"; webResult.NavigateToString(html);
}

4、把 unicode 字符串转换为汉字的逻辑:

 /// <summary>
/// 将Unicode编码转换为汉字字符串
/// </summary>
/// <param name="str">Unicode编码字符串</param>
/// <returns>汉字字符串</returns>
public static string ToChinsesWord(string str)
{
// 使用指定的匹配选项在指定的输入字符串中搜索指定的正则表达式的所有匹配项
MatchCollection mc = Regex.Matches(str, @"\\u([\w]{2})([\w]{2})", RegexOptions.Compiled | RegexOptions.IgnoreCase);
byte[] bts = new byte[]; foreach (Match m in mc)
{
// 将指定样式的数字的字符串表示形式转换为它的等效 32 位有符号整数
bts[] = (byte)int.Parse(m.Groups[].Value, NumberStyles.HexNumber);
bts[] = (byte)int.Parse(m.Groups[].Value, NumberStyles.HexNumber); // 将指定字节数组中的所有字节解码为一个字符串
string newWord = Encoding.Unicode.GetString(bts); str = str.Replace(m.Value, newWord);
} return str;
}

代码链接

02、Unicode 汉子转码小工具的更多相关文章

  1. 02、Unicode 汉字转码小工具

    在做 Windows app 的时候,与服务器端交互使用的是 json 格式的数据,里面的汉字内容被 编码成 unicode 格式,在调试的时候不太方便,就写了个工具,把里面的 unicode 内容转 ...

  2. Unicode汉字转码小工具

    点击按钮即可使用! 在这里粘贴或输入       转换结果:

  3. 【Win】Clso QR Tool 二维码小工具

    一个可以生成并识别二维码的windows小工具,纯绿色.不含糖. 可以通过输入文本生成二维码,或者加载本地图片.剪贴板内的图片,直接解析出二维码内容. 支持自定义LOGO. 下载文件 (当前版本:1. ...

  4. 实例源码--Android小工具源码

      下载源码   技术要点: 1. Android控件布局的使用 2. Http通信 3. XML数据解析 4. 网络状态的监听 5. 源码带有非常详细的中文注释 ...... 详细介绍: 1. An ...

  5. 小程序入口构造工具&二维码测试工具

    小程序入口构造工具&二维码测试工具 本文将介绍我们小程序中隐藏的两个工具页面.原理虽不复杂,收益却实实在在,或许也能给诸君带来启发. 入口构造工具 痛点 PM&运营 投放链接 PM&a ...

  6. python小工具myqr生成动态二维码

    python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...

  7. Windows虚拟地址转物理地址(原理+源码实现,附简单小工具)

                                                                                                        ...

  8. 自制小工具大大加速MySQL SQL语句优化(附源码)

    引言 优化SQL,是DBA常见的工作之一.如何高效.快速地优化一条语句,是每个DBA经常要面对的一个问题.在日常的优化工作中,我发现有很多操作是在优化过程中必不可少的步骤.然而这些步骤重复性的执行,又 ...

  9. 原创SQlServer数据库生成简单的说明文档小工具(附源码)

    这是一款简单的数据库文档生成工具,主要实现了SQlServer生成说明文档的小工具,目前不够完善,主要可以把数据库的表以及表的详细字段信息,导出到 Word中,可以方便开发人员了解数据库的信息或写技术 ...

随机推荐

  1. 中科燕园GIS外包----机场project地理信息系统EGIS

    对于大型机场建设project,不管project建设过程中.还是project建设完毕后.进入执行和维护阶段.必然要产生和使用到大量的各式各样的信息资料,包含project项目过程管理控制类文档,p ...

  2. STL__queue_的应用

    转:http://hi.baidu.com/xiaotiandm/item/bda34511cf9e99098fbde41a 调用的时候要有头文件: #include<stdlib.h> ...

  3. Struts 2.x仍然明显落后于时代。 Struts 2.x这一类老牌Web MVC开发框架仅能用于开发瘦客户端应用,无法用来开发对于交互体验要求更高的应用。

    后来我在工作中陆续使用过Struts 1.x和Struts 2.x.我曾经把一个开源的基于Struts 1.x的自助式广告联盟应用移植到Spring MVC,还基于Struts 2.x做过网站开发.S ...

  4. Android 的独特shell命令

    Android本来就是一个linux操作系统,所以大部分都是linux的命令,如mkdir,ls,netstat,mount,ps 等,这里就不具体介绍了, 主要介绍几个Android特有的. get ...

  5. HDU 4704 Sum (费马定理+快速幂)

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm ...

  6. WebService的相关使用

    近期公司项目使用WebService ,这里简单做个总结. 事实上详细使用细节有些情况下须要改,还须要看实际情况,须要与server联调,详细沟通. 比方公司连接,非要把envelope.dotNet ...

  7. VSTO学习笔记(二)Excel对象模型

    原文:VSTO学习笔记(二)Excel对象模型 上一次主要学习了VSTO的发展历史及其历代版本的新特性,概述了VSTO对开发人员的帮助和效率提升.从这次开始,将从VSTO 4.0开始,逐一探讨VSTO ...

  8. redis的分布式解决方式--codis (转)

    codis是豌豆荚开源的分布式server.眼下处于稳定阶段. 原文地址:https://github.com/wandoulabs/codis/blob/master/doc/tutorial_zh ...

  9. 第一个Python程序的Hello Python,竟然有问题

    print 'hello python' 运行时显示:SyntaxError: invalid syntax 解决办法: 这应该是版本的问题,Python2的话直接就可以输出,但是到了Python3需 ...

  10. 安装ArcGIS License 10.1 许可管理器 破解版 服务启动又失败的解决办法

    安装破解文件的提示执行 替换许可管理器Bin下面的service.txt  文件,之后会发现,许可管理器启动不了(有时候又可以,挺郁闷), 经过多次的试验,我找到了一种折中解决的方法,供大家参考 解决 ...