Python:'填充错误'错误

时间:2013-07-16 23:09:36

标签: javascript python encoding

  1. 我正在尝试base64编码matplotlib生成的图并将其写入GAE的html页面。

  2. 稍后,将图表数字化

  3. 最后,使用xhtml2pdf库将html页面转换为pdf。

  4. 如果情节由jqplot创建,则代码效果很好。但是,一旦切换到matplotlib,我就会遇到一个名为Incorrect padding的错误,我不知道如何解决。感谢您的任何建议。

    第1步

    Python代码:

    import matplotlib
    import matplotlib.pyplot as plt
    import StringIO
    import urllib, base64
    
    plt.figure(1)
    plt.hist([2,3,4,5,6,7], bins=3)
    fig = plt.gcf()
    imgdata = StringIO.StringIO()
    fig.savefig(imgdata, format='png')
    imgdata.seek(0)  # rewind the data
    uri_1 = 'data:image/png;base64,'
    uri_2 = urllib.quote(base64.b64encode(imgdata.buf))
    uri_2 += "=" * ((4 - len(uri_2 ) % 4) % 4)
    uri_3 = uri_1 + uri_2
    uri_4 = '<img id="chart1" src = "%s"/>' % (uri_3)
    

    第2步

    的Javascript
    var n_plot = $('img[id^="chart"]').size();
    i=1;
    var imgData = [];
    while(i <= n_plot){
        //sometimes the plots are generated under jqplot
        try{
            imgData.push($('#chart'+i).jqplotToImageStr({}));
            i=i+1    
        }
       // This case is generated by matplotlib
        catch(e){
        imgData.push($('#chart'+i).attr('src'));
            i=i+1    
        }
    }
    
    imgData_json = JSON.stringify(imgData)
    

    第3步

    的Python

    pdf = pisa.CreatePDF(imgData_json, file(filename, "wb"))
    

1 个答案:

答案 0 :(得分:1)

这就是问题所在:

uri_2 += "=" * ((4 - len(uri_2 ) % 4) % 4)

为什么你认为网址需要额外的填充?如果需要,b64encode的输出将被填充,添加额外的填充只会使解码器混淆。有些人可能会忽略额外的填充,但大多数会产生错误。

哦,而且对于数据网址,不必引用字符串 - base64不包含真正需要转义的字符。只有当您需要在常规网址中使用base64时才需要这样做,因为+=会导致问题,但数据网址却不是这样。