python spyne服务-base64字符串转义

python spyne服务-base64字符串转义,python,base64,spyne,Python,Base64,Spyne,我有一个简单的spyne服务: class JiraAdapter(ServiceBase): @srpc(Unicode, String, Unicode, _returns=Status) def CreateJiraIssueWithBase64Attachment(summary, base64attachment, attachment_filename): status = Status try: newkey

我有一个简单的spyne服务:

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”,然后它会进入服务的转义方法(“\\n”),导致行为异常。是否有设置或其他方法可以避免这种情况?

首先,请对您发布的代码发表一些评论:

  • 必须实例化类型(即
    status=status()
    而不是
    status=status
    )。实际上,您正在
    状态
    类上设置类属性。这不仅是错误的,您还通过在没有正确锁定的情况下更改全局状态来创造竞争条件

  • Jira有办法解决二进制数据的问题吗?您可以使用
    ByteArray
    为您处理base64编码/解码。请注意,
    ByteArray
    作为字符串序列进行反序列化

  • 您可以定义自定义base64类型:

    Base64String = String(pattern='[0-9a-zA-Z/+=]+')
    
    。。。并使用它代替普通的
    字符串
    和验证,轻松地拒绝无效输入

  • 我不会返回“Status”对象,而是在需要时只返回一个异常(或者您可以让原始异常冒泡)。异常也像普通对象一样被序列化。但这是您的决定,因为这取决于您希望如何使用API

  • 现在回答你的原始问题:

    您会同意,正确的做法是将转义'\n'(即0x0a)的内容修复为r“\n”(即0x5c 0x6e)

    如果你想处理这个问题,我想你评论中的解决方案(即
    base64attachment=base64attachment.decode('string-escape')
    将是最好的解决方案

    我希望这有帮助

    致以最诚挚的问候,

    string.decode('string-escape')是一种简单的解决方法,但是我想知道是否有一个服务级别设置可以避免将来出现这些修复。另外请注意:。我不知道它是否会达到2.10,但它会发生。