PayPal IPN POST请求编码

10

当尝试在Pyramid(以及可能是其他框架)中使用PayPal IPN POST有效负载进行操作时,会出现解码错误:

[...]
 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

如何解决这个问题?

5
如果你能将你的解决方案移动到自我回答并接受它,那就太好了。谢谢。 - Kev
2个回答

5

请把你的“问题”编辑成一个真正的问题,然后我们就可以开始了!


出于某种不可思议的原因,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

为了解决这个问题,您可以选择以下两种方式之一:
  1. 点击“My Account”下的“Profile”链接
  2. 在“Selling Preferences”列中找到“Language Encoding”
  3. 单击“More options”
  4. 选择“UTF-8”并保存
或者
  1. 点击“My Account”下的“Profile”链接
  2. 在右侧点击“我的销售工具”
  3. 找到“PayPal按钮语言编码”链接(应该在底部)
  4. 单击“More options”
  5. 选择“UTF-8”并保存
根据您的PayPal帐户类型而定。希望这能为某些人节省时间。

没问题。希望现在看起来更好了。 - dsx

1

由于某些不可思议的原因,PayPal仍然没有进入21世纪,并默认使用Windows-1252编码。这可能会导致一些问题,因为现在普遍期望Unicode成为首选编码。

要解决这个问题,您需要执行以下操作之一:

  1. 单击“My Account”下的“Profile”链接
  2. 在“Selling Preferences”列中找到“Language Encoding”
  3. 单击“More options”
  4. 选择“UTF-8”并保存

或者

  1. 单击“My Account”下的“Profile”链接
  2. 单击右侧的“我的销售工具”
  3. 找到“PayPal button language encoding”链接(应该在底部)
  4. 单击“More options”
  5. 选择“UTF-8”并保存

具体取决于您的PayPal账户类型。希望这能为某人节省一小时的生命。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接