在使用VS2010的CodedUI来做自己的自动化测试框架中介绍了我将使用IronRuby作为脚本语言来编写自动化测试脚本,但是当时在使用IronRuby编写脚本过程中发现了一个编码导致的问题,在这里给大家介绍一下,大家在编写脚本时一定要主要脚本文件的编码。

问题描述

  我在rb文件中调用了C#的Microsoft.VisualStudio.TestTools.UITesting.dll的查找按钮并单击的功能,但是总是报错,说找不到此控件,但是我在C#代码中编写类似代码是没有问题。出现问题后上网搜索了一下,但是毕竟资源不多,没有任何结果,于是上IronRuby的codeplex网站提交了一个bug,见:encode error? 具体描述如下

I want to use VisualStudio UITest to do my auto UI test, but I don't find window and button.
( attachment is Microsoft.VisualStudio.TestTools.UI
Testing.dll )
code:
require "Microsoft.VisualStudio.TestTools.UITesting.dll"
include Microsoft::VisualStudio::TestTools::UITesting::WpfControls
w = WpfWindow.new
w.SearchProperties["Name"] = "你好";
puts w.SearchProperties["Name"]

result: 脛茫潞脙
expect : 你好

  • 为了简化应用,我在C#中建立了一个Application.cs文件,里面有一个Application类,类中有一个test方法,传入一个string参数并直接返回:
    public class Application{public string test(string a){return a;}
}
  • 使用Notepad++建立main.rb,里面主要就是调用Application.Test方法:puts Application.new.test("你好")

运行后,显示的不是”你好“两个字,而是几个乱码。

分析问题

  我上网搜了一些和字符编码相关的内容,很多都是介绍字符编码转换的,如result = Iconv.iconv("GB2312","UTF-16",a) ,我在rb脚本和C#都试过了多个字符转换的情况,发现仍旧不能正确解析。

  这时我突然想起上周遇到此问题后我给公司的一个Ruby高手请教过的这个问题,以下是邮件主要内容:

  • 标题:Ruby处理Unicode有没有什么问题?
  • 问:我现在用的是.Net下的一个Ruby实现IronRuby,现在遇到一个问题,不知道Ruby中是否也有,问题是:在ironRuby代码中直接hash.new 附上中文没有问题,但是有种情况有问题,有一个.Net类库,它有个类似hash的属性,我在ironRuby代码中给它付了一个中文,但是取出来的时候发现是乱码了,不知是何原因?
  • 回复:ruby1.8里面是没有编码的概念,都是字符序列.所以你给他什么就是什么,他不关心.但是ruby文件有编码,直接决定了你的字符序列的编码.我不知道.net是什么编码的,两边一致应该就可以了.

我提出了一个假设,是不是文件编码导致的?

解决问题

既然提出了假设,接下来就是验证我的假设了。由于我对字符编码不熟悉,于是又上网搜索了一些,了解了以下Utf-8,GB2312等,而C#是支持Unicode的,所以我接着又试了以下几步:

  • 在Notepad++把文件更改为UTF-8的格式,如下图所示:

  • 在ir.exe执行中加入参数 -KU
    ir -KU -X:ShowClrExceptions main.rb

再次运行后,发现竟然一切又是那么美好!

问题回顾

  这个问题前后花了我一天时间去解决,总的来说问题相对来说不难,但是需要对Ruby的字符编码有所了解,而我以前没有注意到这个也会引起问题,从解决这个bug过程中,可以有以下几点与大家分享一下:

  1. 遇到陌生问题而自己没有思路时,求助高手是最快速便捷的方法
  2. 解决问题方法之一就是提出假设再验证假设
  3. 使用新技术时,最好系统学习一下,例如我就是花了半天时间看了一下《IronRuby Unleashed.pdf》一书才知道ir.exe的 参数-KKcode了,否则我更改了文件编码也未必会想到增加ir.exe的参数
  4. 知识点:文件编码直接影响ruby的字符编码
本文转自 jingen_zhou 51CTO博客,原文链接:http://blog.51cto.com/zhoujg/518033,如需转载请自行联系原作者

IronRuby - 文件编码惹的祸相关推荐

  1. Samba共享后不能访问,或者看不到文件,是selinux惹的祸

    Samba共享后不能访问是selinux惹的祸 第一种方法:关闭SELinux,并修改配置文件,使系统启动时不启动SELinux. 不关机的关闭方法是:setenforce 0 永久关闭是: vi / ...

  2. 请求网站响应的文本带有乱码,原来是Content-encoding惹的祸,一文带你搞懂`Content-encoding`、`Accept-Encoding`

    请求网站响应回的文本带有乱码,Content-encoding:gzip 今天写爬虫请求网站后,返回的数据中有乱码,怎么转都转不了. 后来研究了一番,应该是Content-encoding惹的祸: 废 ...

  3. ppt提示内存或系统资源不足_为何手机一直提示内存不足?原来是它们惹的祸,赶紧清了...

    现在几乎所有手机的配置都是6G+128GB的,那就是这款手机的内存是6G,存储是128GB,可能有些不太懂手机的朋友,不是很清楚,那就让小编来告诉你把!例如现在的电脑通常都是8G或16G的,硬盘却是5 ...

  4. 氢os android系统耗电,安卓用久了会卡是定制系统惹的祸?氢OS:这锅我不背!

    原标题:安卓用久了会卡是定制系统惹的祸?氢OS:这锅我不背! 可能大家的脑海里都有这种印象:相对于苹果手机能用三四年还依旧流畅不同,安卓手机普遍用个一两年就会出现各种卡顿.为什么会出现这种情况呢?众所 ...

  5. vb.net 网络文件下载完成代码_手机资讯:iPhone信号不好怎么办或是运营商配置文件惹的祸...

    如今使用IT数码设备的小伙伴们是越来越多了,那么IT数码设备当中是有很多知识的,这些知识很多小伙伴一般都是不知道的,就好比最近就有很多小伙伴们想要知道iPhone信号不好怎么办或是运营商配置文件惹的祸 ...

  6. 计算机病毒的危害作文,作文大全-网络病毒惹的祸

    作文大全-网络病毒惹的祸 我喜欢电脑,因为电脑网络给我们的学习带来无穷的资源,为我们打开广阔的学习天地.但我也恨电脑网络,因为网络病毒会惹祸. 暑假里的一天,我闲着没事干,就打开电脑,进入语音聊天室. ...

  7. 计算机的机械硬盘,高端电脑配置为什么还会卡?机械硬盘惹的祸!

    有一些用户装机,会把钱投入最为关键的CPU和独立显卡上,接着配备大容量内存,再来一块大容量的机械硬盘,就比如配置一块intel酷睿i7 6700k处理器/Z170主板,两条8G DDR4内存,再加上G ...

  8. shell 批量转换文件编码

    相信大家在平时的跨平台编程中碰到过文件编码问题,比如在Windows代码字符编码方式是GB2312,然而转到Linux却只支持utf-8,虽然对代码部分没啥影响,但是很多中文注释部分,却一片乱码,很让 ...

  9. ***突然断开可能是ADSL猫惹的祸

    在我们使用×××服务器的时候,最讨厌的就是无故的断线了,可能正在和好×××一起副本,或者正在视频热聊中,还或者youtube视频看的正起劲,突然windows一个对话框弹出 - "连接已经断 ...

最新文章

  1. 敏捷(Agile)与精益(Lean)对比
  2. Scrum敏捷开发工具实力推荐
  3. Linus Torvalds:Linux背后的智者
  4. 技术剖析 | Axonius为什么能获得 2019 RSAC创新大奖
  5. scheduled每天下午1点执行一次_在Spring Boot项目中使用@Scheduled注解实现定时任务...
  6. git 简易指南+常用命令
  7. springboot + mybatis + gradle项目构建过程
  8. servlet返回数据给html_Servlet 简介
  9. Java中的Type接口和Class类有什么区别
  10. oracle中的fetchsize,oracle setFetchsize() 优化查询速度
  11. python机器学习案例系列教程——BIRCH聚类
  12. Struts2之入门
  13. 软件测试测试用例编写 不超过7步骤_软件测试(功能、接口、性能、自动化)详解...
  14. error C2864 只有静态常量整型数据成员才可以在类中初始化
  15. AKM 48450-1 230B 24B 40mA
  16. shell 补齐路径_Linux中10个有用的命令行补全例子
  17. 软件性能测试方案怎么编写?权威的性能测试报告如何申请?
  18. 全局变量的优缺点及为什么要少用全局变量
  19. kartoSLAM报错 transform_tolerance修改解决
  20. HTTP权威指南-连接部分

热门文章

  1. Springboot的thymeleaf常用属性
  2. 关于angular2更新时机的一些发现
  3. matlab中 注意事项--字符串
  4. 【BZOJ3676】 [Apio2014]回文串(SAM,manacher)
  5. Consul入门04 - Consul集群 1
  6. java发送内嵌图片邮件
  7. 一个用Shell脚本写的猜丁壳游戏
  8. 菜鸟学SSH(八)——Hibernate对象的三种状态
  9. 2013 ACM/ICPC 长沙网络赛J题
  10. 爆牙齿的世界杯日记(阿根疼啦)