• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    日語字符的處理

    發布: 2007-7-04 20:03 | 作者: admin | 來源:  網友評論 | 查看: 257次 | 進入軟件測試論壇討論

    領測軟件測試網 10.1 若包含漢字的腳本輸出亂碼或無法正常運行時,該如何處理?

    在ruby 1.6以后的版本中,默認情況下不會對漢字代碼進行特殊的解釋。若想處理漢字時,必須使用ruby -Ke等來設置$KCODE。

    若想在Windows上使用SJIS時,應該設為ruby -Ks;若想在UNIX系列OS上使用EUC時,應該設為ruby -Ke。

    另外,若在腳本首行中添加如下代碼時

    #! ruby -Ks

    就可以將設定的選項置入腳本之中?峙逻@就是最常用的解決方法。

    10.2 選項-K和$KCODE有什么不同?

    產生效果的時機不同。

    例如,在SJIS編碼文件中出現下列代碼的話

    $KCODE = 'SJIS' s = "表"

    在設定$KCODE的值時,腳本的解析過程已經結束。(因為$KCODE的默認值是"NONE")所以字符串沒有被看作是多字節內容。

    如果使用選項-K來指定漢字編碼的話,則在讀入腳本之前已經生效,所以解析腳本時漢字代碼會被正確識別。

    另外,若包含漢字代碼的腳本出現問題時,多半是因為JIS編碼的漢字代碼中包含與反斜杠("\")相同的代碼所致。

    10.3 可以使用日語標識符嗎?

    只要正確設置了-K選項,就可以使用日語標識符。以日語漢字開頭的變量名相當于以小寫字母開頭的變量名。但它的可移植性較低,我們不推薦您這樣做。

    在Hash中,也可以使用日語標識符,而且比較安全。

    var = {'變量' => '值'} var['變量'] = 1 10.4 如何從包含日語字符的字符串中依次抽出1個字符?

    設定$KCODE之后,使用split(//)或scan(/./)即可。

    10.5 tr("あ","a")運作不正常,應如何處置?

    內部的String#tr在進行變換時,是以字節為單位的。在添加了require "jcode"之后,將以日語字符為單位進行處理。 (請參考jcode.rb)

    10.6 如何對平假名進行排序?

    下例是對平假名進行排序的例子(忽略了濁音、半濁音、拗音和撥音)。

    require "jcode" a = "ぁぃぅぇぉがぎぐげござじずぜぞだぢづでど" \ "ばびぶべぼぱぴぷぺぽゃゅょっゎ" b = "あいうえおかきくけこさしすせそたちつてと" \ "はひふへほはひふへほやゆよつわ" ary = %w(ふー ばー ばず) p ary.sort p ary.collect{|l| [l.tr(a,b), l]}.sort.collect!{|e| e[1]} # => ["ばー", "ばず", "ふー"] # ["ばー", "ばず", "ふー"]

    另外,在1.7以后的版本中可以使用Enumerable#sort_by來這樣改寫最后一行

    p ary.sort_by {|l| l.tr(a,b)}

    即可。

    10.7 如何用空白來替代SJIS中從84BF到889F之間的系統相關代碼?

    盡管您可以使用正則表達式中表示范圍的[あ-ん],但直接寫出系統相關字符會影響程序的可讀性。但也不能寫成

    gsub(/[\x84\xbf-\x88\x9f]/s, ' ')

    這樣。此時應該使用如下的小技巧

    gsub(Regexp.compile("[\x84\xbf-\x88\x9f]", nil, 's'), ' ') 或 gsub(/#{"[\x84\xbf-\x88\x9f]"}/s, ' ')

    用數值來表示2字節的代碼,并將其替換為空白字符。(其實并非替換成空白字符,而是("〓"))

    10.8 如何進行全角-半角字符的變換?

    標準方法是使用nkf.so庫或jcode.rb庫進行變換。另外,還可以使用[RAA:Kakasi]庫進行變換。

    請參考[ruby-list:10505], [ruby-list:25839], [ruby-list:31238], [ruby-list:31240], [ruby-list:31508]等等

    10.9 關于半角假名的問題

    Ruby不支持半角假名。

    # 在下例中,請將"ア"看作半角假名 ruby -Ks -e 'p "あア"' => "あ\261"

    據說現在開發中的M17N版ruby就不會出現這種問題。

    10.10 怎樣從包含日語字符的字符串中抽出n字節的內容?

    抽出多字節字符時,可能會將字符一分為二。此時,若正確設定了$KCODE的話,/./就不會匹配拆散的字符了。應對其加以充分利用

    $KCODE = "e" p /./ =~ "あ"[0,1] # => nil # 注: 如果它并不是漢字的構成要素的話,就會進行匹配。 p /./ =~ "\xff" # => 0

    下例中定義了一個jleft方法,它會從字符串左側起抽出至多len字節的內容。

    class String def jleft(len) return "" if len <= 0 str = self[0,len] if /.\z/ !~ str str[-1,1] = '' end str end end $KCODE = 'e' s = "あいうえお" for i in -2 .. s.size+2 p [i, s.jleft(i)] end => [-2, ""] [-1, ""] [0, ""] [1, ""] [2, "あ"] [3, "あ"] [4, "あい"] [5, "あい"] [6, "あいう"] [7, "あいう"] [8, "あいうえ"] [9, "あいうえ"] [10, "あいうえお"] [11, "あいうえお"] [12, "あいうえお"]

    若限定使用EUC編碼時,可以使用下面的方法。

    class String def jleft(len) return "" if len <= 0 str = self[0, len] if str.count("\xa1-\xfe") % 2 == 1 str[-1, 1] = '' end str end end

    注:上述方法都不支持3字節字符。

    10.11 怎么讓日語文本在第n個字處換行?

    可以使用NKF的-f選項。

    require 'nkf' p NKF.nkf("-ef11", "あいうえお、かきくけこ")

    但是NKF會自動進行斷字處理和空格調整,使我們無法進行精確控制。

    若想自己來實現的話,可以使用10.10的方法。

    class String def jfold(len) return "" if len <= 0 right = self.delete("\r\n") while right and not right.empty? left, right = right.unpack("a#{len} a*") if /.\z/ !~ left right[0,0] = left[-1,1] left[-1,1] = '' end yield left end end end "あいうえお、かきくけこ".jfold(11) {|s| puts s } # => あいうえお 、かきくけ こ

    實際上,它是每過n字節就進行一次folding,但并未考慮到TAB的位置問題。與nkf比較起來,它的速度非常慢。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>