IronRuby – 檔案編碼惹的禍

來源:互聯網
上載者:User
文章目錄
  • 問題描述
  • 解決問題
  • 問題回顧

  在使用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的字元編碼

 

歡迎轉載,轉載請註明:轉載自周金根 [ http://zhoujg.cnblogs.com/ ]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.