打 log 的时候,因为会出现 emoji,而 gbk 是不支持 emoji 的,所以刚开始的时候在 windows 机器上(部署程序的机器)的终端打印的 log 会出现 encode error 问题
因为没办法,我们写了个 handler,将 log 存到数据库里面,basic logger 设置成存入日志文件中,以为不在终端打印 emoji 什么的就不会出现问题,但是依然报错
请问,有没有遇见过这种情况的,有什么办法可以解决啊.关键是这个错误是 logging error,都捕获不到异常...
1 xpresslink 2018-03-13 20:53:54 +08:00 看不懂你说什么,windows 机器上也用 utf-8 啊,直接用 byte 模式写根本不会有编码问题。 |
2 xpresslink 2018-03-13 21:03:24 +08:00 直接国标码 GB18030 也能支持 emoji |
3 yangyaofei OP @xpresslink 是 utf8 但是显示在终端的时候会内部转成 gbk 导致错误,并不是想用什么显示 |
5 yangyaofei OP @kunluanbudang 没有,我自己写的 handler,就是很简单的获取后存数据库,另一个就是用 basicConfig 设置成文件输出 |
![]() | 6 qq316107934 2018-03-14 12:18:41 +08:00 via Android 遇到了同样的问题,关注 |
![]() | 7 ZoomQuiet 2018-03-15 07:34:30 +08:00 via iPhone 是也乎 () 最好给一下具体的报错日志现场 文本… 问题的关键在你的判定 gbk 的锅在哪个环节爆的? 目测终端~logging 问题不大…可能是业务代码本身? |
8 yangyaofei OP @ZoomQuiet 不是,是这样的,一个 str 在 python3 里面肯定是 unicode,在显示的时候肯定要转换成系统终端的编码方式,所以当有 emoji 的时候转换不了所以会报错。你可以写个 print(""),估计在 win 的中文系统里面也会报错的,这个地方的问题是我没有输出到终端,输出到文本也这样,我怀疑是输出文件的时候也会转码成 gbk |
9 yangyaofei OP @qq316107934 同上,我觉得这个问题可以把原始的 logger remove 出来,然后再添加一个自己用的 file 或者 stream hadler 来解决,最近在弄优先级更高的任务,所以没弄。要是能找到 basicConfig 里面怎么设置 encode 我想也可以。 |