복붙노트

[RUBY-ON-RAILS] 루비 1.8.7 (또는 레일 2.X)에서 () String.force_encoding

RUBY-ON-RAILS

루비 1.8.7 (또는 레일 2.X)에서 () String.force_encoding

이 루비 1.9에서처럼 작동 그래서 루비 1.8.7 (또는 레일 2.X)에서 String.force_encoding ()를 사용하는 솔루션이 있습니까? 나는 뭔가에 대한 active_support을 필요로 읽을 수 있지만이 작업을하지 않습니다

$> 보석 목록 --local | 그렙 '레일 \ | activesupport'

 activesupport (3.0.3, 2.3.8, 2.3.5)
 rails (2.3.8, 2.3.5)

$> 루비 -v

ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10.4.0]

$> 레일 -v

Rails 2.3.8

IRB :

> require "rubygems"
=> true 
> require "active_support"
=> true 
> "asdf".force_encoding("UTF-8")
NoMethodError: undefined method `force_encoding' for "asdf":String
> String.respond_to?(:force_encoding)
=> false

해결법

  1. ==============================

    1.1.9는 문자열의 인코딩 필드를 변경한다는 것이다 유일한 일이 force_encoding가하는, 실제로는 문자열의 바이트를 수정하지 않습니다.

    1.9는 문자열의 인코딩 필드를 변경한다는 것이다 유일한 일이 force_encoding가하는, 실제로는 문자열의 바이트를 수정하지 않습니다.

    force_encoding은 어떤 조합 없을 것이다 그래서 루비 1.8, 문자열 인코딩의 개념이 없습니다. 당신은 1.8 및 1.9에 동일한 코드를 실행할 수 있도록하려면이처럼 직접 추가 할 수 있습니다 :

    class String
      def force_encoding(enc)
        self
      end
    end
    

    물론 당신은 그들이 매우 다르게이 문제를 처리하기 때문에 인코딩이, 1.8 및 1.9에서 동일한를 작동하도록해야 할 것을 다른 일이있을 것입니다.

  2. ==============================

    2.이 두 루비 1.8.7과 루비 1.9 당신에게 문자열 #의 to_my_utf8을 줄 것이다 :

    이 두 루비 1.8.7과 루비 1.9 당신에게 문자열 #의 to_my_utf8을 줄 것이다 :

    require 'iconv'
    class String
      def to_my_utf8
        ::Iconv.conv('UTF-8//IGNORE', 'UTF-8', self + ' ')[0..-2]
      end
    end
    

    그리고...

    ?> "asdf".to_my_utf8
    => "asdf"
    

    폴 Battley에서 영감 또한 remote_table 보석에 내 나이가 작품의 일부를 기억.

  3. from https://stackoverflow.com/questions/4583924/string-force-encoding-in-ruby-1-8-7-or-rails-2-x by cc-by-sa and MIT license