概述
公司需要做个B/S架构的前端展示项目,当前以为是小case,但是在实现后端功能的时候,还是被坑了。
功能描述
项目需要实现的功能是调用外部第三方程序, 实时读取第三方程序的输出,发送到前端展示。因为懒得切换平台以及三方程序还未就绪,所以在Windows写了个BAT脚本做仿真,顺带调试程序。
问题描述
通过golang的os.exec执行三方程序(BAT脚本),通过管道读取程序输出的时候,发现给websocket发数据的时候,前端的链路会莫名其妙的提示close,也没有其他错误。
问题根源
经过一通瞎几把排查,最后将根源锁定在三方程序(BAT脚本)的输出中,发现输出中有中文字符,因为Windows系统的默认编码是GBK或者GB2312,但是golang的源码使用的都是UTF-8,导致往Websocket写GBK的中文数据([]byte)的时候出现异常,接着触发了后端代码发起了主动关闭动作。
注意:
如果直接在golang的代码里面直接写中文,通过Websocket发送是不会出错的,因为代码文件中文和代码文件的编码一致的,所以不会出现问题
解决方法
脚本内部通过chcp 65001将编码设置成UTF-8后,问题解决。