我已经使用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
有人可以建议一种方法吗?
答案 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()
干杯
理查德