我有一个简单的间谍服务:
class JiraAdapter(ServiceBase):
@srpc(Unicode, String, Unicode, _returns=Status)
def CreateJiraIssueWithBase64Attachment(summary, base64attachment, attachment_filename):
status = Status
try:
newkey = jira_client.createWithBase64Attachment(summary, base64attachment, attachment_filename)
status.Code = StatusCodes.IssueCreated
status.Message = unicode(newkey)
except Exception as e:
status.Code = StatusCodes.InternalError
status.Message = u'Internal Exception: %s' % e.message
return status
问题是某些程序会在生成的base64string中插入'\ n',每隔60个字符左右,它将进入服务的方法转义('\\ n'),导致事情表现奇怪。是否有设置或某些东西可以避免这种情况?
答案 0 :(得分:0)
首先,关于您发布的代码的一些评论:
您必须实例化您的类型(即status = Status()
而不是status = Status
)。实际上,您要在Status
类上设置类属性。不仅仅是错误,你还通过在没有正确锁定的情况下改变全局状态来创建竞争条件。
Jira有办法用二进制数据创建问题吗?您可以使用ByteArray
来处理base64编码/解码。请注意,ByteArray
被反序列化为一系列字符串。
您可以定义自定义base64类型:
Base64String = String(pattern='[0-9a-zA-Z/+=]+')
...并使用它而不是普通String
以及验证来毫不费力地拒绝无效输入。
除了返回“状态”对象之外,我什么都不返回,只需在需要时引发异常(或者你可以让原始异常冒泡)。异常也像普通对象一样被序列化。但这是您的决定,因为这取决于您希望如何使用API。
现在提出原来的问题:
你会同意在这里做的正确的事情是将任何逃脱'\ n'(即0x0a)的东西修复为r“\ n”(即0x5c 0x6e)。
如果您想处理它,我想您评论中的解决方案(即base64attachment = base64attachment.decode('string-escape')
)将是最佳解决方案。
我希望有所帮助。
致以最诚挚的问候,