原文: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. Lua学习笔记9:多文件

    一 终端中运行多个文件:-l 增加在文件一中定义了一个变量,在还有一文件里输出这个变量.代码例如以下: --file1.lua num = 100 --file2.lua print(num) 终端输 ...

  2. 承载于以太网帧之上的数据包的解析——ARP、IPv4、IPv6

    承接上一博文而来,继续解析网络数据包,对于承载在以太网上的三种协议进行了解析,主要是分为依据RFC定义的标准先解析头部数据,然后得到有效载荷,即为协议包括的实体数据,更上层进行进一步处理. 一.ARP ...

  3. nginx源代码分析--event事件驱动初始化

    1.在nginx.c中设置每一个核心模块的index ngx_max_module = 0; for (i = 0; ngx_modules[i]; i++) { ngx_modules[i]-> ...

  4. Leetcode_num13_Climbing Stairs

    称号: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cl ...

  5. cisco路由器IPSEC VPN配置(隧道模式)

    拓扑如下: R1配置hostname R1enable password cisco  crypto isakmp policy 1        #创建IKE协商策略,编号为1 encr 3des  ...

  6. HDU 3277 Marriage Match III(二分+最大流)

    HDU 3277 Marriage Match III 题目链接 题意:n个女孩n个男孩,每一个女孩能够和一些男孩配对,此外还能够和k个随意的男孩配对.然后有些女孩是朋友,满足这个朋友圈里面的人.假设 ...

  7. hdu1709(母函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1709 题意: 给你一个n,表示n个物品,下面有n个数,表示n个物品的重量,然后进行称量,每个物品只有一 ...

  8. hdu1114(完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 分析:很裸的一道完全背包题,只是这里求装满背包后使得价值最少,只需初始化数组dp为inf:dp[ ...

  9. Coreseek:indexer crashed神秘

    浩哥前两天让我再Coreseek该指数再次这样做,由于需求方面变化不大,公司名称应出现指数.在添加的配置文件的面孔sql_field_string:串场.. 此属性特别有用,因为它不仅作为过滤器的特性 ...

  10. Android-IA Power Manager (S3)

    Sleep and wake up