python:<;类型';例外情况。UnicodeError'&燃气轮机;为什么会这样?

python:<;类型';例外情况。UnicodeError'&燃气轮机;为什么会这样?,python,Python,下面是完整的日志,问题出在 23 dd.append(str(msg.get_json())) 我从msg.get_json()返回了一些utf-8。。。 str()是否会尝试使用ASCII编码参数 <type 'exceptions.UnicodeEncodeError'> Python 2.6.5: /usr/bin/python Mon Nov 15 18:53:39 2010 A problem occurred in a Python s

下面是完整的日志,问题出在

   23             dd.append(str(msg.get_json()))
我从msg.get_json()返回了一些utf-8。。。 str()是否会尝试使用ASCII编码参数

<type 'exceptions.UnicodeEncodeError'>  Python 2.6.5: /usr/bin/python
Mon Nov 15 18:53:39 2010

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
 /usr/lib/pymodules/python2.6/flup/server/fcgi_base.py in run(self=<flup.server.fcgi_base.Request object>)
  556         """Runs the handler, flushes the streams, and ends the request."""
  557         try:
  558             protocolStatus, appStatus = self.server.handler(self)
  559         except:
  560             traceback.print_exc(file=self.stderr)
protocolStatus undefined, appStatus undefined, self = <flup.server.fcgi_base.Request object>, self.server = <flup.server.fcgi.WSGIServer object>, self.server.handler = <bound method WSGIServer.handler of <flup.server.fcgi.WSGIServer object>>
 /usr/lib/pymodules/python2.6/flup/server/fcgi_base.py in handler(self=<flup.server.fcgi.WSGIServer object>, req=<flup.server.fcgi_base.Request object>)
 1116         try:
 1117             try:
 1118                 result = self.application(environ, start_response)
 1119                 try:
 1120                     for data in result:
result = None, self = <flup.server.fcgi.WSGIServer object>, self.application = <function app>, environ = {'CONTENT_LENGTH': '81', 'CONTENT_TYPE': 'application/x-www-form-urlencoded; charset=UTF-8', 'DOCUMENT_ROOT': '/usr/local/nginx/html', 'DOCUMENT_URI': '/a.bc', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'application/json, text/javascript, */*', 'HTTP_ACCEPT_CHARSET': 'GB2312,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'zh-cn,zh;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', ...}, start_response = <function start_response>
 /root/bc/trunk/python/server.py in app(environ={'CONTENT_LENGTH': '81', 'CONTENT_TYPE': 'application/x-www-form-urlencoded; charset=UTF-8', 'DOCUMENT_ROOT': '/usr/local/nginx/html', 'DOCUMENT_URI': '/a.bc', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'application/json, text/javascript, */*', 'HTTP_ACCEPT_CHARSET': 'GB2312,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'zh-cn,zh;q=0.5', 'HTTP_CACHE_CONTROL': 'no-cache', ...}, start_response=<function start_response>)
  125     config.dbg(cmd_name)
  126     if cmd_name in cmd_map:
  127         ret = cmd_map[cmd_name](q)
  128     else:
  129         ret = '{"' + cmd_name + '": {"result":"error"}}';
ret = 'cmd=get_room_updates&room=room2&connectionid=90125080-f0a6-11df-9dcb-0800279f1ca2', global cmd_map = {'chat_message': <function chat_message_cmd>, 'enter_room': <function enter_room_cmd>, 'get_room_updates': <function get_room_updates_cmd>, 'login_user': <function login_user_cmd>, 'register_user': <function register_user_cmd>}, cmd_name = 'get_room_updates', q = {'cmd': ['get_room_updates'], 'connectionid': ['90125080-f0a6-11df-9dcb-0800279f1ca2'], 'room': ['room2']}
 /root/bc/trunk/python/server.py in get_room_updates_cmd(qs={'cmd': ['get_room_updates'], 'connectionid': ['90125080-f0a6-11df-9dcb-0800279f1ca2'], 'room': ['room2']})
   88         room = config.gOnlineRooms[room_name]
   89         conn = room.chat_connections[connectionid]
   90         remaining = conn.get_pending_message()
   91 
   92     return remaining 
remaining = '[]', conn = <ChatConnection.ChatConnection instance>, conn.get_pending_message = <bound method ChatConnection.get_pending_message of <ChatConnection.ChatConnection instance>>
 /root/bc/trunk/python/ChatConnection.py in get_pending_message(self=<ChatConnection.ChatConnection instance>)
   21         for msg in self.pending_message:
   22             txt = txt + msg.get_json() + ","
   23             dd.append(str(msg.get_json()))
   24 
   25         config.dbg("dd = " + str(dd))
dd = [], dd.append = <built-in method append of list object>, builtin str = <type 'str'>, msg = <Message.Message instance>, msg.get_json = <bound method Message.get_json of <Message.Message instance>>

<type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode characters in position 79-80: ordinal not in range(128)
      args = ('ascii', u'{"id":"168", "username":"binc2", "ctime":"2010-11-15 18:53:37.165260", "body":"\u4e2d\u56fd", "room":"room2"}', 79, 81, 'ordinal not in range(128)')
      encoding = 'ascii'
      end = 81
      message = ''
      object = u'{"id":"168", "username":"binc2", "ctime":"2010-11-15 18:53:37.165260", "body":"\u4e2d\u56fd", "room":"room2"}'
      reason = 'ordinal not in range(128)'
      start = 79 
python2.6.5:/usr/bin/Python
2010年11月15日星期一18:53:39
Python脚本中出现问题。下面是导致错误的函数调用序列,按发生顺序排列。
/运行中的usr/lib/pymodules/python2.6/flup/server/fcgi_base.py(self=)
556“运行处理程序、刷新流并结束请求。”“”
557尝试:
558 protocolStatus,appStatus=self.server.handler(self)
559除:
560 traceback.print_exc(file=self.stderr)
protocolStatus未定义,appStatus未定义,self=,self.server=,self.server.handler=
/处理程序中的usr/lib/pymodules/python2.6/flup/server/fcgi_base.py(self=,req=)
1116尝试:
1117尝试:
1118结果=自应用程序(环境、启动和响应)
1119尝试:
1120对于结果中的数据:
结果=无,自我=,自我应用=,环境={'CONTENT_LENGTH':'81','CONTENT_TYPE':'application/x-www-form-urlencoded;charset=UTF-8','DOCUMENT_ROOT':'/usr/local/nginx/html','DOCUMENT_URI':'/a.bc','GATEWAY_INTERFACE':'CGI/1.1','HTTP_ACCEPT':'application/json,text/javascript,*/*,'HTTP_ACCEPT_字符集':'GB2312,UTF-8;q=0.7,*;q=0.7','HTTP_ACCEPT(ACCEPT(编码':'HTTP(ip,aAccept_LANGUAGE':'zh cn,zh;q=0.5','HTTP_缓存控制':'no CACHE',…},start_响应=
/应用程序中的root/bc/trunk/python/server.py(环境={'CONTENT_LENGTH':'81','CONTENT_TYPE':'application/x-www-form-urlencoded;charset=UTF-8','DOCUMENT_ROOT':'/usr/local/nginx/html','DOCUMENT_URI':'/a.bc','GATEWAY_INTERFACE':'CGI/1.1','HTTP_ACCEPT':'application/json,text/javascript,*/*,'HTTP_ACCEPT_字符集':'GB2312,UTF-8;q=0.7,*;q=0.7','HTTP_ACCEPT(ACCEPT(编码':'HTTP(ip,aAccept_LANGUAGE':'zh cn,zh;q=0.5','HTTP_缓存控制':'no CACHE',…},start_response=)
125 config.dbg(cmd_名称)
126如果cmd_映射中的cmd_名称:
127 ret=cmd_映射[cmd_name](q)
128其他:
129 ret='{'+cmd_name+':{“结果”:“错误”}}';
ret='cmd=get_room_updates&room=room2&connectionid=90125080-f0a6-11df-9dcb-0800279f1ca2',全局cmd_map={'chat_message':,'enter_room':,'get_room_updates':,'login_user','register_user':},cmd name='get_room_updates',q={'cmd':['get_room_updates','cmd','get_room_updates','
/get_room_updates_cmd中的root/bc/trunk/python/server.py(qs={'cmd':['get_room_updates'],'connectionid':['90125080-f0a6-11df-9dcb-0800279f1ca2'],'room':['room2']
88房间=配置房间[房间名称]
89 conn=聊天室连接[连接ID]
90剩余=连接获取挂起消息()
91
92剩余收益
剩余=“[]”,conn=,conn.get_pending_消息=
/get_pending_消息中的root/bc/trunk/python/ChatConnection.py(self=)
21对于self.pending_消息中的消息:
22 txt=txt+msg.get_json()+“,”
23 dd.append(str(msg.get_json()))
24
25 config.dbg(“dd=“+str(dd))
dd=[],dd.append=,内置str=,msg=,msg.get\u json=
:“ascii”编解码器无法对79-80位置的字符进行编码:序号不在范围内(128)
args=('ascii',u'{“id”:“168”,“username”:“binc2”,“ctime”:“2010-11-15 18:53:37.165260”,“body”:“\u4e2d\u56fd”,“room”:“room2”}”,79,81,“序号不在范围内(128)”)
编码='ascii'
完=81
消息=“”
object=u'{“id”:“168”,“username”:“binc2”,“ctime”:“2010-11-15 18:53:37.165260”,“body”:“\u4e2d\u56fd”,“room”:“room2”}”
原因='序号不在范围内(128)'
开始=79

问题最有可能发生在
str(msg.get_json())
或您使用
str
的其他地方。对象包含unicode数据,
str
不是为处理unicode而构建的。您应该能够使用
json.dumps(msg.get_json())
。或者使用
str(msg.get_json()).decode('utf-8'))

尝试

unicode([object[,encoding[,errors]])

使用以下模式之一返回对象的Unicode字符串版本: 如果没有提供可选参数,unicode()将模拟str()的行为,只是它返回unicode字符串而不是8位字符串。更准确地说,如果对象是unicode字符串或子类,它将返回该unicode字符串,而不应用任何附加解码


为什么您认为需要使用
str()
?json.dumps()也不能处理utf-8,unfortunately@Bin陈。文件似乎不同意: