You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telnet所用文件格式及客户端文本格式异常问题咨询

解决Telnet客户端接收数据显示异常的问题

嘿,这个问题我太熟了!你看到的那些[2J、[2;1H、[1;30;47m之类的内容,其实是ANSI终端控制序列——服务器在给终端发送控制指令(比如清屏、移动光标、设置文本/背景颜色),但你的Telnet客户端现在只是把这些原始的控制字符直接输出了,没有解析执行它们,所以才会显示成这种“乱码”效果。

两种解决方案,按需选择

1. 解析ANSI序列,保留终端格式

如果你想让客户端正确显示服务器返回的菜单样式(颜色、布局),就需要解析这些ANSI控制序列。你可以自己实现一个简单的解析器,或者直接用现成的库来帮你处理:

  • 比如Python里可以用colorama库,它能帮你在Windows、Linux、Mac上都正确解析ANSI序列,示例代码如下:
    import colorama
    from telnetlib import Telnet
    
    # 初始化colorama,确保跨终端兼容
    colorama.init(autoreset=True)
    
    # 连接Telnet服务器
    with Telnet("你的服务器IP", 23) as tn:
        while True:
            # 读取服务器返回的数据
            data = tn.read_until(b"\n", timeout=5)
            if not data:
                break
            # 解码并打印,colorama会自动处理ANSI序列
            print(data.decode("utf-8"), end="")
    
  • 其他语言也有对应工具,比如Java的Jansi,C#的AnsiConsole等,原理都是一样的:识别并执行这些终端控制指令,而不是直接输出原始字符。

2. 移除ANSI序列,提取纯文本

如果你不需要保留终端的格式,只想拿到干净的菜单文字,可以用正则表达式把所有ANSI控制序列过滤掉:

  • 正则表达式可以用:\x1B\[[0-9;]*[A-Za-z],专门匹配ANSI转义序列
  • Python示例代码:
    import re
    from telnetlib import Telnet
    
    # 编译正则表达式,提升匹配效率
    ansi_escape_pattern = re.compile(r'\x1B\[[0-9;]*[A-Za-z]')
    
    with Telnet("你的服务器IP", 23) as tn:
        while True:
            data = tn.read_until(b"\n", timeout=5)
            if not data:
                break
            # 解码为字符串
            raw_text = data.decode("utf-8")
            # 移除所有ANSI控制序列
            clean_text = ansi_escape_pattern.sub('', raw_text)
            print(clean_text, end="")
    
    处理后你示例里的内容就会变成清晰的纯文本:

    Main menu
    1 Stock Booking
    2 Despatch
    3 Production Issues
    4 Production Returns
    5 Void batch
    6 Area Transfer
    7 Unit Issue
    8 Order Labe...

额外小提示

别忘了在Telnet协商时设置合适的终端类型(比如TERM=vt100),有些服务器会根据你声明的终端类型发送不同的控制序列,设置正确的终端类型能减少兼容性问题。另外也要确认你用了正确的字符编码(比如UTF-8或ASCII)来解码接收到的字节数据,避免出现额外的乱码。

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:44:19