I have a pyramid 1.2 application which processes donations made via
PayPal using a service called PayPal Instant Payment Notification.
Today, we had a donation from an international user with non-ascii
characters in their last name. PayPal makes a post request to our
server with information about the pyramid view that handles these the
request failed when I tried to access the last name from
request.params.get('last_name')
I believe requests are encoded as windows-1252, not UTF-8, which is
causing this error. Unfortunately, I do not have the option of
changing the encoding method on PayPal's end.
File "/home/mario/webapps/mario_dyn/mario/mario/views/donate.py",
line 241, in donate_ipn
value = request.params.get(key)
File "/home/mario/webapps/mario_dyn/lib/python2.7/UserDict.py", line
168, in get
return self[key]
File "/home/mario/webapps/mario_dyn/lib/python2.7/webob/multidict.py",
line 312, in __getitem__
return self._decode_value(self.multi.__getitem__(self._encode_key(key)))
File "/home/mario/webapps/mario_dyn/lib/python2.7/webob/multidict.py",
line 301, in _decode_value
value = value.decode(self.encoding, self.errors)
File "/home/mario/webapps/mario_dyn/lib/python2.7/encodings/utf_8.py",
line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 1:
invalid continuation byte
So, my question is, how do I tell the the request that the request is
encoded windows-1252 not utf-8, or convert it to utf-8 prior to
accessing the params MultiDict.
On Sunday, 17 June 2012 22:42:16 UTC-4, Brian wrote:
> I have a pyramid 1.2 application which processes donations made via > PayPal using a service called PayPal Instant Payment Notification. > Today, we had a donation from an international user with non-ascii > characters in their last name. PayPal makes a post request to our > server with information about the pyramid view that handles these the > request failed when I tried to access the last name from > request.params.get('last_name')
> I believe requests are encoded as windows-1252, not UTF-8, which is > causing this error. Unfortunately, I do not have the option of > changing the encoding method on PayPal's end.
> File "/home/mario/webapps/mario_dyn/mario/mario/views/donate.py", > line 241, in donate_ipn > value = request.params.get(key) > File "/home/mario/webapps/mario_dyn/lib/python2.7/UserDict.py", line > 168, in get > return self[key] > File "/home/mario/webapps/mario_dyn/lib/python2.7/webob/multidict.py", > line 312, in __getitem__ > return > self._decode_value(self.multi.__getitem__(self._encode_key(key))) > File "/home/mario/webapps/mario_dyn/lib/python2.7/webob/multidict.py", > line 301, in _decode_value > value = value.decode(self.encoding, self.errors) > File "/home/mario/webapps/mario_dyn/lib/python2.7/encodings/utf_8.py", > line 16, in decode > return codecs.utf_8_decode(input, errors, True) > UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 1: > invalid continuation byte
> So, my question is, how do I tell the the request that the request is > encoded windows-1252 not utf-8, or convert it to utf-8 prior to > accessing the params MultiDict.
On Mon, Jun 18, 2012 at 10:09 AM, Blaise Laflamme <bla...@laflamme.org> wrote:
> Hi Brian,
> yes you can change the encoding on paypal's end. Look here:
> Profile > My Selling Tools > Paypal button language encoding > More options
> And select utf8 on both popups.
> On Sunday, 17 June 2012 22:42:16 UTC-4, Brian wrote:
>> I have a pyramid 1.2 application which processes donations made via
>> PayPal using a service called PayPal Instant Payment Notification.
>> Today, we had a donation from an international user with non-ascii
>> characters in their last name. PayPal makes a post request to our
>> server with information about the pyramid view that handles these the
>> request failed when I tried to access the last name from
>> request.params.get('last_name')
>> I believe requests are encoded as windows-1252, not UTF-8, which is
>> causing this error. Unfortunately, I do not have the option of
>> changing the encoding method on PayPal's end.
>> File "/home/mario/webapps/mario_dyn/mario/mario/views/donate.py",
>> line 241, in donate_ipn
>> value = request.params.get(key)
>> File "/home/mario/webapps/mario_dyn/lib/python2.7/UserDict.py", line
>> 168, in get
>> return self[key]
>> File "/home/mario/webapps/mario_dyn/lib/python2.7/webob/multidict.py",
>> line 312, in __getitem__
>> return
>> self._decode_value(self.multi.__getitem__(self._encode_key(key)))
>> File "/home/mario/webapps/mario_dyn/lib/python2.7/webob/multidict.py",
>> line 301, in _decode_value
>> value = value.decode(self.encoding, self.errors)
>> File "/home/mario/webapps/mario_dyn/lib/python2.7/encodings/utf_8.py",
>> line 16, in decode
>> return codecs.utf_8_decode(input, errors, True)
>> UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 1:
>> invalid continuation byte
>> So, my question is, how do I tell the the request that the request is
>> encoded windows-1252 not utf-8, or convert it to utf-8 prior to
>> accessing the params MultiDict.
>> Thank you,
>> Brian
> --
> You received this message because you are subscribed to the Google Groups
> "pylons-discuss" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/pylons-discuss/-/TGRcs0t_dkAJ.
> To post to this group, send email to pylons-discuss@googlegroups.com.
> To unsubscribe from this group, send email to
> pylons-discuss+unsubscribe@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/pylons-discuss?hl=en.
This means that the request passed around within pyramid will be using
the gbk charset. Failure to decode the request with this charset will
cause UnicodeDecodeError exceptions so you may want to add extra logic
to your request factory to handle these things.
> Unfortunately, I do not have access to the Paypal encoding settings.
> I'm tracking donations made to an account I do not own.
> So, I need to be able to accept windows-1252 encoding in my pyramid app.
> Is there a way I can decode and re-encode the request.body before it's
> parsed into the params MultiDict?
> Brian
> On Mon, Jun 18, 2012 at 10:09 AM, Blaise Laflamme <bla...@laflamme.org> wrote:
>> Hi Brian,
>> yes you can change the encoding on paypal's end. Look here:
>> Profile > My Selling Tools > Paypal button language encoding > More options
>> And select utf8 on both popups.
>> On Sunday, 17 June 2012 22:42:16 UTC-4, Brian wrote:
>>> I have a pyramid 1.2 application which processes donations made via
>>> PayPal using a service called PayPal Instant Payment Notification.
>>> Today, we had a donation from an international user with non-ascii
>>> characters in their last name. PayPal makes a post request to our
>>> server with information about the pyramid view that handles these the
>>> request failed when I tried to access the last name from
>>> request.params.get('last_name')
>>> I believe requests are encoded as windows-1252, not UTF-8, which is
>>> causing this error. Unfortunately, I do not have the option of
>>> changing the encoding method on PayPal's end.
>>> File "/home/mario/webapps/mario_dyn/mario/mario/views/donate.py",
>>> line 241, in donate_ipn
>>> value = request.params.get(key)
>>> File "/home/mario/webapps/mario_dyn/lib/python2.7/UserDict.py", line
>>> 168, in get
>>> return self[key]
>>> File "/home/mario/webapps/mario_dyn/lib/python2.7/webob/multidict.py",
>>> line 312, in __getitem__
>>> return
>>> self._decode_value(self.multi.__getitem__(self._encode_key(key)))
>>> File "/home/mario/webapps/mario_dyn/lib/python2.7/webob/multidict.py",
>>> line 301, in _decode_value
>>> value = value.decode(self.encoding, self.errors)
>>> File "/home/mario/webapps/mario_dyn/lib/python2.7/encodings/utf_8.py",
>>> line 16, in decode
>>> return codecs.utf_8_decode(input, errors, True)
>>> UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 1:
>>> invalid continuation byte
>>> So, my question is, how do I tell the the request that the request is
>>> encoded windows-1252 not utf-8, or convert it to utf-8 prior to
>>> accessing the params MultiDict.
>>> Thank you,
>>> Brian
>> --
>> You received this message because you are subscribed to the Google Groups
>> "pylons-discuss" group.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msg/pylons-discuss/-/TGRcs0t_dkAJ.
>> To post to this group, send email to pylons-discuss@googlegroups.com.
>> To unsubscribe from this group, send email to
>> pylons-discuss+unsubscribe@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/pylons-discuss?hl=en.
> --
> You received this message because you are subscribed to the Google Groups "pylons-discuss" group.
> To post to this group, send email to pylons-discuss@googlegroups.com.
> To unsubscribe from this group, send email to pylons-discuss+unsubscribe@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/pylons-discuss?hl=en.