处理终端pty乱码的过程

举报
yd_238926406 发表于 2023/08/10 22:24:51 2023/08/10
【摘要】 背景使用 github.com/creack/pty 开发远程终端,实现之后发现 websocket 接口返回结果的结尾包含了很多字符。想复制下来查询发现复制不了,然后截图放大发现是一堆的 NUL。 分析NUL 是ASCII中的控制符0x00,是空值的意思,代表啥也没有,C里面终结字符串。分析代码发现这两行:originmsg := make([]byte, 1024)_, err :=...

背景

使用 github.com/creack/pty 开发远程终端,实现之后发现 websocket 接口返回结果的结尾包含了很多字符。

想复制下来查询发现复制不了,然后截图放大发现是一堆的 NUL

分析

NUL 是ASCII中的控制符0x00,是空值的意思,代表啥也没有,C里面终结字符串。

分析代码发现这两行:

originmsg := make([]byte, 1024)
_, err := ptySession.Read(originmsg)

直接把终端输出读到了buffer中,同时也读到了这些NUL字符。

解决

# 将 NUL 空值替换为空字符串
msg := bytes.ReplaceAll(originmsg, []byte{0}, []byte(""))

参考

终端的特殊控制符

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。