以前无论是用Python2还是Python3,在中文显示上都会遇到些许的障碍。即便Python3对中文编码的友好度已经大大提升,但是还是会出现显示的是编码的内容而不是转译之后的中文的情况。
现在,对于这种情况有了一个比较好的处理方式,在Python3中,可以利用chardet包来查询编码的格式是什么。
例如这样一段编码
b'[2018-07-16 15:42:58 +0800] [14859] [INFO] \xe5\xbc\x80\xe5\xa7\x8b\xe4\xbc\x91\xe7\x9c\xa0Zzzzzzzzzzzzz.....\n'
是我用Python程序读取log日志文件后输出的结果。很明显可以看出是编码的内容没有正确地转义成中文,但是对于编码格式以及强制转义方式都不了解的我甚至都不清楚这个是utf还是gbk。这个时候就可以利用chardet。
import subprocess
import chardet
p = subprocess.Popen('tail -F apperr.log', shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE,)
while True:
line = p.stdout.readline()
if line:
print(chardet.detect(line))
程序的结果为:
{'encoding': 'utf-8', 'confidence': 0.938125, 'language': ''}
这个时候我们就确定了我们的编码格式,那么只需要去找如何将bytes格式的编码强制转换成中文了。
line = p.stdout.readline()
if line:
print(line.decode('utf-8'))
这样,输出就成了中文了:
[2018-07-16 15:49:50 +0800] [14859] [INFO] 开始休眠Zzzzzzzzzzzzz.....
同时,在python中读取了一段string后要筛选出该string中的中文字符:
def cleanHTML(self, text):
ans = ""
for a in text:
if (a > u'\u4e00') and (a < u'\u9fff'):
ans += a
return ans