使用telnetlib

时间:2019-04-14 13:05:00

标签: python ascii non-ascii-characters telnetlib

试图使用telnetlib帮助我在老式的BBS上玩TradeWars。

我记得(这是30年前),BBS使用某种扩展的ASCII和/或称为ANSI的东西。用于彩色文本和一些简单的图形,例如边缘,角等。

gnu telnet这样的通用telnet终端无法正确呈现这些站点。 enter image description here SyncTerm(一种古老的软件)可以在我的Mac上运行,并且可以正确显示文本和图形。 enter image description here

我的问题是telnetlib.read_until()返回bytes,我无法将其解码为可读的内容。

我的登录读/写片段:

print (tt.read_until("Show today's log?".encode('ascii')),3)
tt.write('\r\n'.encode('ascii'))
print (tt.read_until('[Pause]'.encode('ascii')),3)
tt.write('\r\n'.encode('ascii'))
print (tt.read_until('Password?'.encode('ascii')),3)
tt.write('NOTMYPASSWORD\r\n'.encode('ascii'))
zaa = tt.read_until('[Pause]'.encode('ascii'))
print(zaa)
tt.write('\r\n'.encode('ascii'))

read_until()在给我bytes

print (type(zaa)) zaa.decode('utf-8')

<class 'bytes'> ' ****\r\x1b[0m\n\r\n\x1b[1;33mYou have been on today.\r\x1b[0m\n\x1b[32mSearching for messages received since your last time on\x1b[1;33m:\r\x1b[0m\n\x1b[32mNo messages received.\r\x1b[0m\n\x1b[35m[Pause]'

但是我不知道如何将它们解码为更好看的东西,或者至少只是剥离所有糟糕的色彩控制代码或它们是什么。

关于如何很好地解析它的任何建议吗?

谢谢

==========

这是我现在想出的。但是仍然想知道是否有更好的解决方案。

def de_ansi(somebytes):
    #https://stackoverflow.com/questions/13506033/filtering-out-ansi-escape-sequences
    #https://stackoverflow.com/questions/14693701/how-can-i-remove-the-ansi-escape-sequences-from-a-string-in-python
    ansi_escape = re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]')
    text =  ansi_escape.sub('', somebytes.decode('utf-8'))
    return text.splitlines()

这不起作用,因为出现了一些非utf-8代码: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xde in position 265: invalid continuation byte

如果我将其解码为Latin-1,则不会抛出任何错误,但输出结果很糟糕:

['ú.   Üßßß Ûßßß  ßÛß        ÍÞÍÞðÞÍÞÍÞÍÞðÞ', 'ÞÍÞ  ..ÜßßÜÛÜ      ßÛÛÛÜÜ   ÛÛÛÍÞÍÞÍÞúÞÍÍÍÞÍÞ', 'ÞðÞ   Visit : telnet://mtlgeek.synchro.netÛÛÛÛ ÜÛÜ      ßÛÛÛÜÜ ÛßÍÍðÍËÞÍÞÍËÍÞÍÞ', 'Þ͹   ÜßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜßßßÜÜÍÞÍÞÊÞÍÞ͹ðÞÍÞ', 'ÞÍÞÍÞÉÞÍðúðÍÞ»ÞðÞÍÞÉÞÍÞúÞðÍÍÍðÞÍÞðÞÍÞÍÞðÞÍÍÍÞÍÞÍÞúÞÍðÍÞÍÞÍÞÍÞðÞÍÞÍÞÍÞÍÎÍÞÍÞÍÞúATrade Wars 2002 Win32 module now loading.', '', 'Mearratwe', 'tcfho SMearra', 'twetcfho SMea', 'rratwetcfho ', 'SMartech SoftwareMartech SoftwareMartech Software', 'Martech SoftwareMartech SoftwareShocfe', 'ttwraarMeSh', 'ocfettwraarM', 'e             ', '  psrtensepsrt', 'ensepsrtensepresen', 'tspresentspresentspresentspresentspresentse', 'snetrspseenrtp', 's              ', '  úúúúúúú', '.ßÜ°°°°±°°±±°  ²±°±°°±°   °    °    °±±°±±°±', '

0 个答案:

没有答案