Кодирование запроса POST для PayPal IPN

При попытке работать с PayPal IPN POST в Pyramid (и, возможно, другие) я получаю ошибки декодирования:

[...]
 File "./project/views.py", line 716, in paypal_ipn
    message = request.POST
  File "build/bdist.linux-x86_64/egg/webob/request.py", line 745, in POST
  File "build/bdist.linux-x86_64/egg/webob/multidict.py", line 74, in from_fieldstorage
  File "build/bdist.linux-x86_64/egg/webob/multidict.py", line 67, in <lambda>
  File "/sites/ts/lib64/python2.6/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf3 in position 5: invalid continuation byte

Как это исправить?

Ответ 1

Измените свой "вопрос" на реальный вопрос, и мы будем рады!


По какой-то нечестивой причине PayPal все еще не в 21 веке и по-прежнему использует кодировку Windows-1252 по умолчанию. Это может создать некоторые проблемы, так как вполне разумно ожидать, что unicode станет кодировкой выбора в настоящее время.

Это может привести к чему-то вроде следующей трассировки при использовании Pyramid:

[...]
 File "./project/views.py", line 716, in paypal_ipn
    message = request.POST
  File "build/bdist.linux-x86_64/egg/webob/request.py", line 745, in POST
  File "build/bdist.linux-x86_64/egg/webob/multidict.py", line 74, in from_fieldstorage
  File "build/bdist.linux-x86_64/egg/webob/multidict.py", line 67, in <lambda>
  File "/sites/ts/lib64/python2.6/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf3 in position 5: invalid continuation byte

Чтобы исправить это, вы должны:

  • Нажмите ссылку "Профиль" в разделе "Моя учетная запись"
  • В столбце "Selling Preferences" найдите "Language Encoding"
  • Нажмите "Дополнительные параметры"
  • Выберите "UTF-8" и сохраните

или

  • Нажмите ссылку "Профиль" в разделе "Моя учетная запись"
  • Нажмите "Мои инструменты для продажи" справа.
  • Найдите ссылку на кодировку языка кнопок PayPal (она должна быть внизу)
  • Нажмите "Дополнительные параметры"
  • Выберите "UTF-8" и сохраните

В зависимости от типа вашей учетной записи PayPal. Надеюсь, что это спасет кого-то и час жизни.

Ответ 2

По какой-то нечестивой причине PayPal все еще не в 21 веке и по-прежнему использует кодировку Windows-1252 по умолчанию. Это может создать некоторые проблемы, так как вполне разумно ожидать, что unicode станет кодировкой выбора в настоящее время.

Чтобы исправить это, вы должны:

  • Нажмите ссылку "Профиль" в разделе "Моя учетная запись"
  • В столбце "Selling Preferences" найдите "Language Encoding"
  • Нажмите "Дополнительные параметры"
  • Выберите "UTF-8" и сохраните

или

  • Нажмите ссылку "Профиль" в разделе "Моя учетная запись"
  • Нажмите "Мои инструменты для продажи" справа.
  • Найдите ссылку на кодировку языка кнопок PayPal (она должна быть внизу)
  • Нажмите "Дополнительные параметры"
  • Выберите "UTF-8" и сохраните

В зависимости от типа вашей учетной записи PayPal. Надеюсь, что кто-то спасет час жизни.