IronRuby - 文件编码惹的祸
在使用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過程中,可以有以下幾點與大家分享一下:
本文轉自 jingen_zhou 51CTO博客,原文鏈接:http://blog.51cto.com/zhoujg/518033,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的IronRuby - 文件编码惹的祸的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqlplus 中@ ? !号的作用
- 下一篇: Android--使用VideoView