Python3自定义解码

时间:2017-12-13 18:01:40

标签: python python-3.x

当我将我的代码从python2迁移到python3时。我的代码没有产生所需的结果,而是产生错误:代码片段和错误日志,如下所示。

import os
import sys
import base64
def decode(key, enc):
    dec = []
    enc = base64.urlsafe_b64decode(enc)
    print(enc)
    for i in range(len(enc)):
        key_c = key[i % len(key)]
        print(key_c)
        dec_c = chr((256 + ord(enc[i]) - ord(key_c)) % 256)
        print(dec_c)
        dec.append(dec_c)
    return "".join(dec)

contents = "p6KisaignLOinZqgmqKin6OT0uTZ0tSTlaKmpI+klJ+loI"
decodedLicense = decode('crab',contents)

错误日志:

File "s.py", line 16, in decode
    dec_c = chr((256 + ord(enc[i]) - ord(key_c)) % 256)
TypeError: ord() expected string of length 1, but int found

1 个答案:

答案 0 :(得分:0)

我不知道最终结果是否正确,因为您没有在问题中指出所需或预期的输出,这使得很难确定。

无论如何,正如我在评论中所说,最初我得到了一个不同的错误抱怨contents Incorrect padding TypeError: ord() expected string of length 1, but int found的长度,所以我做的第一件事就是添加一些东西来解决这个问题。然后。我开始在你的问题中提到所做的base64.urlsafe_b64decode()例外

只需使用ord()直接返回的字节而不是尝试使用import os import sys import base64 def decode(key, enc): dec = [] enc = base64.urlsafe_b64decode(enc).decode('latin1') for i in range(len(enc)): key_c = key[i % len(key)] dec_c = chr((256 + enc[i] - ord(key_c)) % 256) # ord(enc[i]) -> enc[i] dec.append(dec_c) return "".join(dec) contents = "p6KisaignLOinZqgmqKin6OT0uTZ0tSTlaKmpI+klJ+loI" # 46 chars # Pad contents so its length is a multiple of 3 and it's valid Base64 data. contents = contents + {0: '', 1: '==', 2: '='}[len(contents) % 3] decodedLicense = decode('crab', contents) print(decodedLicense) # -> D0AOE.;Q?+9>70A=@!q?v`s120EB,23=B. 来修复问题。

这些更改的代码至少会运行......:

            OutputStream outputStream = response.getOutputStream();
        ITextRenderer renderer = new ITextRenderer();
        // renderer.getFontResolver().addFont("/fonts/arialbold.ttf",
        // BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
        renderer.getFontResolver().addFont("/fonts/arial.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        renderer.getFontResolver().addFont("/fonts/arialbold.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

        // SharedContext sharedContext = renderer.getSharedContext();
        // sharedContext.setPrint(true);
        // sharedContext.setInteractive(false);
        // sharedContext.setReplacedElementFactory(new B64ImgReplacedElementFactory());
        // sharedContext.getTextRenderer().setSmoothingThreshold(0);

        renderer.setDocumentFromString(content);
        renderer.layout();
        renderer.createPDF(outputStream);
        renderer.finishPDF();
        outputStream.close();