将Twilio sms主体转换为字符串 - @符号的编码错误

时间:2012-07-05 22:35:20

标签: python google-app-engine python-2.7 twilio

我正在使用Twilio通过短信向我的python webapp发送一个电子邮件地址。但是,当我尝试转换包含电子邮件地址的短信机构时,我得到了一个例外。

<type 'exceptions.UnicodeEncodeError'>, UnicodeEncodeError('ascii', u'myemail\xa1gmail.com', 13, 14, 'ordinal not in range(128)'), <traceback object at 0x10cca5f8>)
Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~tester-sandbox/1.360113171877023968/website/sms.py", line 22, in post
    from_body = str(cgi.escape(self.request.get('Body', None))).strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa1' in position 13: ordinal not in range(128)

我知道这是一个编码错误,它在电子邮件地址中的@字符上磕磕绊绊。在谷歌搜索这个问题后,我找到了

的建议
sys.setdefaultencoding( "latin-1" )

但是这简单地用@符号替换了@。解决这个问题的最简单方法是什么?

1 个答案:

答案 0 :(得分:2)

我联系了Twilio来了解这个问题,结果证明这不是一个蟒蛇问题。当用户发送他们的电子邮件地址(通过短信)时,它发送一个¡字符(而不是@),不幸的是非ascii - 因此是例外。

来自Twilio:

  

某些运营商尚未修复以允许正确格式化   保存在通过其网络发送的短信中,因此您将看到   一些运营商处理短信中的@标志腐败。

     

一个可能的解决方法是在您的网络上启用unicode字符编码   Twilio帐号。这可能是你的缺点   限于发送70个字符或更少的SMS消息   长度