当我将我的代码从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
答案 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();