def recode(self, text): encoding = self.encodings.get(text) if encoding is None: return text if sys.version_info[0] >= 3: # sys.stdin is set up for surrogates in GPGKeys.input() return decode(encode(text, encoding), errors='surrogateescape') else: return encode(decode(text), encoding)
def parse_keys(self, stdoutdata): # Process stdoutdata as byte string since we must run # unescape before decoding. for line in stdoutdata.strip().split(b('\n')): if line[:3] == b('pub'): fields = line.split(b(':')) keyid = fields[4][8:] userid = unescape(fields[9]) keyid, key_enc = gpgdecode(keyid) userid, user_enc = gpgdecode(userid) if sys.version_info[0] < 3: keyid = encode(keyid) userid = encode(userid) self.encodings.setdefault(userid, user_enc) yield (keyid, userid)