InvalidURIError - how to clean up URIs before using .open()

Hello, I got the following back from delayed_job:

    [Worker(XXXXXX pid:3720)] Class#XXXXXXX failed with URI::InvalidURIError: bad URI(is not URI?): https://s3.amazonaws.com/cline-local-dev/2/attachments/542/original/mac-os-x\[1\]\.jpeg?AWSAccessKeyId=xxxxxxxx&Expires=1295403309&Signature=xxxxxxx%3D - 3 failed attempts

The way this URI comes from in my app is:

In my user_mailer I do:

      @comment.attachments.each do |a|         attachments[a.attachment_file_name] = open(a.authenticated_url()) {|f| f.read }       end

Then in my attachments model:

      def authenticated_url(style = nil, expires_in = 90.minutes)         AWS::S3::S3Object.url_for(attachment.path(style || attachment.default_style), attachment.bucket_name, :expires_in => expires_in, :use_ssl => attachment.s3_protocol == 'https')       end

That being said, is there some type of URI.encode or parsing I can do to prevent a valid URI (as I checked the URL works in my browser) for erroring and killing delayed_job in rails 3?

Thank you!

erroring...

and, sorry, that *doesn't* mean it's valid.

via: http://www.ietf.org/rfc/rfc1738.txt

<q> Other characters are unsafe because    gateways and other transport agents are known to sometimes modify    such characters. These characters are "{", "}", "|", "\", "^", "~",    "[", "]", and "`".

   All unsafe characters must always be encoded within a URL. </q>

HTH,

Thank you. What's the best way to Encode All Unsafe Characters? And should that be done in the model? or in the mailer?