diff --git a/lib/fog/aws.rb b/lib/fog/aws.rb index 30ed08476..ad41b990e 100644 --- a/lib/fog/aws.rb +++ b/lib/fog/aws.rb @@ -92,7 +92,7 @@ module Fog def self.escape(string) string = begin - Unicode::normalize_C(string) + ::Unicode::normalize_C(string) rescue Fog::Logger.warning("Fog::AWS string escaping will not normalize Unicode characters on JRuby, pending a fix for issue #2279") string diff --git a/lib/fog/aws/storage.rb b/lib/fog/aws/storage.rb index 69c7680da..794145062 100644 --- a/lib/fog/aws/storage.rb +++ b/lib/fog/aws/storage.rb @@ -168,9 +168,15 @@ module Fog "/#{escape(bucket_name.to_s)}#{path}" end - # NOTE: differs fram Fog::AWS.escape by NOT escaping `/` + # NOTE: differs from Fog::AWS.escape by NOT escaping `/` def escape(string) - string = Unicode::normalize_C(string) + string = begin + ::Unicode::normalize_C(string) + rescue + Fog::Logger.warning("Fog::Storage::AWS string escaping will not normalize Unicode characters on JRuby, pending a fix for issue #2279") + string + end + string.gsub(/([^a-zA-Z0-9_.\-~\/]+)/) { "%" + $1.unpack("H2" * $1.bytesize).join("%").upcase }