<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-167  評論-65  文章-0  trackbacks-0
    環境 : ruby 1.8.7 + rails 2.1.0 +  ubuntu 8.10
    ruby 在截取 中文字符串時 經常出現亂碼  。例如:

    a = "測a試 中文aaa"
    b = 'test'

    p a.size # 17 (可以看出一個中文字符在ruby中是3個英文字符)
    p b.length # 4
    puts a.slice(0,13) # 測a試 中?  slice method (0是start下標處,13是length)


    最后一個輸出最后 是亂碼,在java中是unicode編碼就沒有這個問題,所以我們需要轉換下編碼來解決。。

    例如在rails的 application_helper.rb 定義一個轉換的方法

      def cut_string(charset,src,start,length)
        require "iconv"
        @conv=Iconv.new("UTF-16",charset)
        @reverse_conv=Iconv.new(charset,"UTF-16")
        p_start=start.class==Fixnum&&start>=0
        p_length=length.class==Fixnum&&length>=0
        return "" unless src&&p_start&&p_length
        src_utf16=@conv.iconv(src)
        cutted_src_utf_16=src_utf16[2*start+2,2*length]
        @reverse_conv.iconv(cutted_src_utf_16)
      end


    view中使用:

    <%
        a = '測a 試中文'
        puts cut_string('UTF-8',a,0,4) # 測a 試
    %>


    ref:
    http://my.opera.com/sawpad/blog/show.dml/235183
    http://www.javaeye.com/topic/201531

    補充:
    真傷心,之前截取字符串,用上面的方法,還需要自己封裝,自己轉碼解決,沒想到rails已經把我們封裝好了。。就是 truncate 方法。。看了下源碼真簡單,只需要輸出對應字符串的chars 就解決了,源碼:

            def truncate(text, length = 30, truncate_string = "...")
              if text
                l = length - truncate_string.chars.length
                chars = text.chars
                (chars.length > length ? chars[0...l] + truncate_string : text).to_s
              end
            end

    使用demo:

    <%
    a = 'test'
    b = '測試中文'

    p truncate(a,2,'...') # "tes..."
    p truncate(b,2,'...') # "測試中..."

    %>


    如果需要得到漢字的長度 可以使用 jcode 庫 里的 jlength

    demo:

    s = "測試140字測試140字測試140字測試140字測試140字測試140字測試140字測試140字測試140字測試140字測試140字測試140字測試140字測試
        140字測試140字測試140字測試140字測試140字測試140字測試140字測試140字測試140字測試1"

    $KCODE='utf8'

    require 'jcode'

    p s.jsize

    p s.jlength

    ref:
    http://blog.guoshuang.com/?p=4769
    http://lifegoo.pluskid.org/?p=257


    write by feng
    posted on 2009-08-24 14:23 fl1429 閱讀(3672) 評論(0)  編輯  收藏 所屬分類: Rails
    已訪問數:
    free counters
    主站蜘蛛池模板: 国产亚洲精品免费| 亚洲另类无码专区首页| 97国免费在线视频| 精品亚洲永久免费精品| 东方aⅴ免费观看久久av | 免费无码一区二区三区蜜桃大| 91亚洲精品麻豆| 免费中文熟妇在线影片| 天堂亚洲国产中文在线| 午夜高清免费在线观看| 亚洲av无码专区在线电影天堂 | 国产在线观看免费观看不卡 | h片在线观看免费| 亚洲av综合色区| 99久久久精品免费观看国产| 亚洲免费观看在线视频| 日韩在线天堂免费观看| 一边摸一边桶一边脱免费视频 | 亚洲AV成人片色在线观看| 巨波霸乳在线永久免费视频| 国产精品亚洲片夜色在线| 永久免费视频v片www| 一个人看的在线免费视频| 久久精品国产亚洲av成人| 免费无码黄十八禁网站在线观看| 亚洲色大情网站www| 久久激情亚洲精品无码?V| 无码成A毛片免费| 亚洲AV日韩综合一区| 国产亚洲精品线观看动态图| 国产精品免费观看| 美女扒开尿口给男人爽免费视频 | 日本免费精品一区二区三区 | 亚洲色大成网站WWW国产| 亚洲AV无码乱码在线观看牲色| a级成人毛片免费视频高清| 亚洲1234区乱码| 国产成人精品曰本亚洲79ren| 中文字幕成人免费视频| 免费在线观看亚洲| 亚洲综合一区二区|