Prettytable库输出中文的问题

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 #Author: ####
 4 
 5 from prettytable import PrettyTable
 6 x = PrettyTable(["姓名", "性别", "年龄", "存款"])
 7 
 8 x.align["姓名"] = "1" #以姓名字段左对齐
 9 x.padding_width = 1  # 填充宽度
10 x.add_row(["赵一","男", 20, 100000])
11 x.add_row(["钱二","男", 21, 500])
12 x.add_row(["孙三", "男", 22, 400.7])
13 x.add_row(["李四", "男", 23, 619.5])
14 x.add_row(["周五", "男", 24, 1214.8])
15 x.add_row(["吴六", "女", 25, 646.9])
16 x.add_row(["郑七", "女", 26, 869.4])
17 x.add_row(["王七加一", "男", 21, 869.4])
18 
19 print(x)

网上有这样一个示例,能够格式化输出中文标题并且不乱码,但是我运行这段代码之后输出的是乱码标题
是因为python版本不对的问题吗?python2.7环境下要怎么设置才能输出中文不乱码?

ps:在jupyter notebook里输出是正常的,在命令行环境下直接运行输出就乱码
图片描述
python环境如下
图片描述

阅读 11.2k
2 个回答

我在pycharm下输出是正常的, 你在中文前面加个u试试, 如: x.add_row([u"赵一","男", 20, 100000])

新手上路,请多包涵

之所以有输出乱码问题,是因为终端的字符编码和 prettytable 序列化时的编码不一致所致,正确的代码是:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from __future__ import unicode_literals
import sys

from prettytable import PrettyTable
x = PrettyTable(["姓名", "性别", "年龄", "存款"], encoding=sys.stdout.encoding)

x.align["姓名"] = "1" #以姓名字段左对齐
x.padding_width = 1  # 填充宽度
x.add_row(["赵一","男", 20, 100000])
x.add_row(["钱二","男", 21, 500])
x.add_row(["孙三", "男", 22, 400.7])
x.add_row(["李四", "男", 23, 619.5])
x.add_row(["周五", "男", 24, 1214.8])
x.add_row(["吴六", "女", 25, 646.9])
x.add_row(["郑七", "女", 26, 869.4])
x.add_row(["王七加一", "男", 21, 869.4])

print(x)

此外关于中文字串前加“u”的问题,是 python 在 2.x 版本的一个历史性缺陷,只要加上

from __future__ import unicode_literals

中文字符前就不需要加“u”了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题