当在python3中使用Ladon库发布webservice的时候,如果定义的方法中包含中文字符(参数说明除外),例如下面代码,到导致在web端http://localhost:port中出现无法查看soap的description
1 class AccountManager(object): 2 @ladonize(str, str, rtype=str) 3 def getUsername(self, userid, mailAddr='None'): 4 ''' 这是中文描述字符'''
主要的原因是wsgi_application.py文件中的一个bug导致,这个bug发生在python3版本上。
1 if not hasattr(output, 'read'): 2 # not file-like object 3 content_length = str(len(output))
这里的content_length是计算header的Content-Length的值,output是字符串类型进行计算
1 if sys.version_info[0] >= 3: 2 # Python 3 support 3 if type(output) == str: 4 output = bytes(output, charset) 5 return [output]
这里的output被转换成了bytes类型。而在output中包含中文的情况下,对于str类型的len(output)和对于bytes类型的len(output)的结果是不一样的,str类型的结果会比bytes类型的结果小,每个中文字符会小一个字节的长度,就导致最后生成的wsdl的内容被截取而出现语法错误,进而无法通过浏览器完整显示出来。
1 if not hasattr(output, 'read'): 2 # not file-like object 3 if sys.version_info[0] >= 3: 4 # Python 3 support 5 if type(output) == str: 6 output = bytes(output, charset) 7 content_length = str(len(output))
问题将得到解决。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。