<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
    主站蜘蛛池模板: 91热成人精品国产免费| 四虎永久在线精品免费一区二区| 久久免费美女视频| 国产亚洲成归v人片在线观看| 看一级毛片免费观看视频| 免费国产成人午夜私人影视| 麻豆一区二区三区蜜桃免费| 亚洲日韩人妻第一页| 黄床大片免费30分钟国产精品| 国产亚洲精品线观看动态图| 97无码人妻福利免费公开在线视频| 亚洲国产精品成人精品无码区在线| 午夜网站在线观看免费完整高清观看 | a毛片在线看片免费| 亚洲AV本道一区二区三区四区| 免费无码中文字幕A级毛片| 亚洲视频一区在线播放| 国产精品免费观看久久| 另类专区另类专区亚洲| 亚洲美女又黄又爽在线观看| 久久A级毛片免费观看| 亚洲欧美黑人猛交群| 亚洲色偷偷综合亚洲AV伊人| 无码精品一区二区三区免费视频| 亚洲欧洲日韩综合| 免费99热在线观看| 国产免费阿v精品视频网址| 免费一区二区视频| 亚洲免费在线视频播放| 亚洲av乱码一区二区三区香蕉 | 亚洲欧洲精品成人久久曰| 免费a级毛片永久免费| 中文字幕视频在线免费观看| 亚洲乱码卡一卡二卡三| 免费在线观看的黄色网址| 日韩精品在线免费观看| 亚洲国产精品无码久久九九大片| 中文字幕亚洲无线码| 搡女人真爽免费视频大全| 中国极品美軳免费观看| 99亚偷拍自图区亚洲|