如何解决记录日期格式错误地表示为│
我有一个具有设置格式的日志记录脚本。出于可读性考虑,它使用utf-8符号,并且设置了编码以保存文件,如下所示。
log = logging.getLogger('general')
fmt = logging.Formatter('%(asctime)s.%(msecs)03d │ %(levelname)-10s│ %(lineno)4s %(funcName)-20s│ %(message)s',datefmt='%Y/%m/%d │ %H:%M:%S')
handler_error = logging.handlers.RotatingFileHandler("error.log",'a',encoding="utf-8")
handler_error.setLevel(logging.INFO)
handler_error.setFormatter(fmt)
log.addHandler(handler_error)
理论上,所有分隔符都应为│,而 datefmt 中的分隔符将被更改为¦。因此,生成的日志如下所示-注意正确添加了所有垂直线,但日期和时间之间只有一组。
我尝试使用unicode \ u2502 代替│,但没有帮助。有关如何解决此问题的任何想法?
编辑-来自其他用户执行的错误日志。
File "C:\Users\xxx\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py",line 1025,in emit
msg = self.format(record)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py",line 869,in format
return fmt.format(record)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py",line 610,in format
record.asctime = self.formatTime(record,self.datefmt)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py",line 548,in formatTime
s = time.strftime(datefmt,ct)
UnicodeEncodeError: 'locale' codec can't encode character '\u2502' in position 9: encoding error
解决方法
解决方案:您需要将LC_CTYPE
设置为UTF-8
以下更多的 Box图纸字符示例显示datefmt
字符串中有一些字符转换(类似于Windows命令tree
vs tree /A
之间的区别)。
# -*- coding: utf-8 -*-
import time,locale
t = time.localtime()
datefmt = '%Y/%m/%d ─│┌┐└┘├┤┬┴┼═║╔╗╚╝╠╣╦╩╬ %H:%M:%S'
print( '\n datefmt:',datefmt)
print( '\nLC_CTYPE:',locale.getlocale(category=locale.LC_CTYPE) )
print( 'strftime:',time.strftime(datefmt,t) )
locale.setlocale(locale.LC_CTYPE,(locale.getlocale()[0],'1252'))
print( '\nLC_CTYPE:','utf8'))
print( '\nLC_CTYPE:',t) )
输出:.\SO\63472673.py
datefmt: %Y/%m/%d ─│┌┐└┘├┤┬┴┼═║╔╗╚╝╠╣╦╩╬ %H:%M:%S LC_CTYPE: ('Czech_Czechia','1250') strftime: 2020/08/20 ¦--¬L-++T++=¦-¬L-¦¦T¦+ 19:29:14 LC_CTYPE: ('Czech_Czechia','1252') strftime: 2020/08/20 -¦+++++¦--+-¦++++¦¦--+ 19:29:14 LC_CTYPE: ('Czech_Czechia','utf8') strftime: 2020/08/20 ─│┌┐└┘├┤┬┴┼═║╔╗╚╝╠╣╦╩╬ 19:29:14
不幸的是,我找不到Python源代码中的字符翻译(可以看到(我的本机)代码页1250
中存在一个错误:字符─
和{{1} }分别翻译为│
和¦
,即以相反的顺序……
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。