想通过zabbix告警的告警脚本实现发送郵件的功能但告警消息中含有中文字符。在python脚本中发邮件时报错。
- 设置脚本1.py后使用报警媒介的测试功能进行检查。
- 传输参数如下消息内容包含有中文。
分析报错是字符的编码格式错误。
- 首先打印传输过来的参数获得结果:
-
“中文”两个汉字被转换成了"\udce4\udcb8\udcad\udce6\udc96\udc87"。首先確定这个是unicode,经分析这个格式是utf-8编码后的即zabbix告警在调用接口的时候,进行了数据的转换并没有把“中文”两个字直接输出,而是经过叻转换
-
添加修改编码的语句后,正常:
- zabbix告警传入的参数是\u字符串但python3在处理内部声明时,为了精简空间将数据转换成了\x(十六进制),所以需要从\u向\x进行转换但不能直接使用encode(‘utf-8’),会报错
需要添加参数errors='surrogateescape’来屏蔽错误Python 3 中新增的 surrogateescape 则是一种可逆的错误处理机制,利用 Surrogate 码位保存无法解码的字节编码时则将其还原为对应的原始字节。