Issue #7155 has been updated by mame (Yusuke Endoh).

Status changed from Open to Rejected

Closing because OP seemed to re-register another ticket #7156.

-- 
Yusuke Endoh <mame / tsg.ne.jp>
----------------------------------------
Bug #7155: Invalid byte sequence in US-ASCII when using open-air
https://bugs.ruby-lang.org/issues/7155#change-32404

Author: t0d0r (Todor Dragnev)
Status: Rejected
Priority: Normal
Assignee: 
Category: lib
Target version: 
ruby -v: 1.9.3p286


Invalid byte sequence in US-ASCII on ruby 1.9.3

I receive that error when trying to open url with bulgarian text (utf-8: "??????????"). It seems that the problem is in uri/common.rb from ruby standard library...

adding str.force_encoding(Encoding::BINARY) to following method fix the problem

class URI::Parser
  def escape(str, unsafe = @regexp[:UNSAFE])
    unless unsafe.kind_of?(Regexp)
      # perhaps unsafe is String object
      unsafe = Regexp.new("[#{Regexp.quote(unsafe)}]", false)
    end
    str.force_encoding(Encoding::BINARY) # FIX
    str.gsub(unsafe) do
      us = $&
        tmp = ''
      us.each_byte do |uc|
        tmp << sprintf('%%%02X', uc)
      end
      tmp
    end.force_encoding(Encoding::US_ASCII)
  end
end

One more suggestion -  maybe US_ASCII must be replaced to Encoding::BINARY too?


-- 
http://bugs.ruby-lang.org/