Docusign:Python代码无法上传PDF格式

时间:2014-04-08 06:45:18

标签: python docusignapi

我已经使用python实现了嵌入式签名(已遵循Docusign示例中给出的代码)。一切都适用于.txt个文件。

任何其他格式都会给我一个编码错误。

UnicodeDecodeError: 'ascii' codec can't decode byte 0x9c in position 351: ordinal not in range(128)

代码:

filepath = os.path.join(settings.MEDIA_ROOT, documentName)

    fileContents = open(filepath, "r").read()

    requestBody = "\r\n\r\n--BOUNDARY\r\n" + \
                  "Content-Type: application/json\r\n" + \
                  "Content-Disposition: form-data\r\n" + \
                  "\r\n" + \
                  envelopeDef + "\r\n\r\n--BOUNDARY\r\n" + \
                  "Content-Type: text/plain\r\n" + \
                  "Content-Disposition: file; filename=\"test_doc.txt\"; documentId=1\r\n" + \
                  "\r\n" + \
                  fileContents + "\r\n" + \
                  "--BOUNDARY--\r\n\r\n"

    # append "/envelopes" to the baseUrl and use in the request
    url = baseUrl + "/envelopes";
    headers = {'X-DocuSign-Authentication': AUTHENTICATION_STR, 'Content-Type': 'multipart/form-data; boundary=BOUNDARY',
               'Accept': 'application/json'};
    http = httplib2.Http()

    response, content = http.request(url, 'POST', headers=headers, body=requestBody)

我尝试用UTF-8进行编码

 import codecs
    fileContents = codecs.open(filepath,mode='r', encoding='utf-8').read()

仍然没有帮助。

我还尝试将Content-Type更改为:application/pdf

有人可以建议一种方法吗?

的DocuSign

3 个答案:

答案 0 :(得分:0)

你的终端设置是什么......它应该是UTF-8。另外,请查看此article以获得有关unicode的更清晰图片。

试试这个:

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

编辑:

定义源代码编码也有很多帮助:

# -*- coding: utf-8 -*-

查看PEP 0263文档

答案 1 :(得分:0)

根据文件格式(例如PDF),您可能需要将内容作为二进制字节处理 - 而不是unicode文本。通常,您希望以二进制模式打开文件:open(filepath, "rb").read()。这可以防止将文件内容转换为unicode文本,并返回字节str

答案 2 :(得分:0)

我也遇到了这个问题,发现问题是:

fileContents = open(filepath, "r").read()

应该是(读二进制):

fileContents = open(filepath, "rb").read()

干杯

理查德