试图使用telnetlib
帮助我在老式的BBS上玩TradeWars。
我记得(这是30年前),BBS使用某种扩展的ASCII和/或称为ANSI的东西。用于彩色文本和一些简单的图形,例如边缘,角等。
像gnu telnet
这样的通用telnet终端无法正确呈现这些站点。
SyncTerm(一种古老的软件)可以在我的Mac上运行,并且可以正确显示文本和图形。
我的问题是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 ', ' úúúúúúú', '.ßÜ°°°°±°°±±° ²±°±°°±° ° ° °±±°±±°±', '