# File lib/ruby_parser_extras.rb, line 928
  def hack_encoding str, extra = nil
    # this is in sorted order of occurrence according to
    # charlock_holmes against 500k files
    encodings = [
                 extra,
                 Encoding::ISO_8859_1,
                 Encoding::UTF_8,
                 Encoding::ISO_8859_2,
                 Encoding::ISO_8859_9,
                 Encoding::SHIFT_JIS,
                 Encoding::WINDOWS_1252,
                 Encoding::EUC_JP,
                ].compact

    # terrible, horrible, no good, very bad, last ditch effort.
    encodings.each do |enc|
      begin
        str.force_encoding enc
        if str.valid_encoding? then
          str.encode! Encoding::UTF_8
          break
        end
      rescue Encoding::InvalidByteSequenceError
        # do nothing
      rescue Encoding::UndefinedConversionError
        # do nothing
      end
    end

    # no amount of pain is enough for you.
    raise "Bad encoding. Need a magic encoding comment." unless
      str.encoding.name == "UTF-8"
  end