如何解决prettytable正确显示汉字

from prettytable import PrettyTable

header="乘客姓名,性别,出生日期".split(",")
x = PrettyTable(header)
x.align["乘客姓名"]="l"
table='''HuangTianhui,男,1948/05/28
姜翠云,女,1952/03/27
李红晶,女,1994/12/09
LuiChing,女,1969/08/02
宋飞飞,男,1982/03/01
唐旭东,男,1983/08/03
YangJiabao,女,1988/08/25
买买提江·阿布拉,男,1979/07/10
安文兰,女,1949/10/20
胡偲婠(婴儿),女,2011/02/25
(有待确定姓名),男,1985/07/20
'''
data=[row for row in table.split("n") if row]
for row in data:
    x.add_row(row.strip().split(","))

print(x)

在这里输入图像描述

我想要的输出格式如下。

在这里输入图像描述

在这个例子中,prettytable.py无法正确显示汉字的模糊宽度·买买提江·阿布拉 ,字符宽度不明确。 如何修复prettytable.py中的错误?

我在def _char_block_width(char)的prettytable.py中添加了两行,但问题仍然存在。

if char == 0xb7:
    return 2 

我已经解决了这个问题,文件prettytable.py应该安装在我的电脑d: python33 Lib site-packages中directly not in as the form of d:python33Libsite-packagesprettytableprettytable.py

有很多中文字符宽度不明确,添加两行如下来修正错误是愚蠢的,如果有50个含糊的字符,100行将被添加到prettytable.py中,有没有一种简单的方法要做到这一点? 只需修复一些行来处理所有含糊的字符?

if char == 0xb7:
    return 2 

您遇到的问题与Python输出中填充不正确行的点字符有关。 点是Unicode代码点U+00B7 · middle dot 。 这个字符被认为具有“模糊”的宽度,因为它在大多数非东亚字体中是一个窄字符,但在大多数亚洲字体中是全角。 如果没有上下文,程序无法确定它将在屏幕上显示的宽度。 不幸的是,Python的Unicode系统似乎没有任何方式来提供该上下文。

一种修复方法可能是将有问题的点替换为具有明确宽度的点,例如U+30FB katakana middle dot (始终为全宽)。 这样,填充逻辑将能够识别该行需要额外的空间。

另一种解决方案可能是将控制台设置为使用更多西方处理中间点字符的字体,而不是将东亚风格渲染为全角的当前字体。 这将意味着现有的填充是正确的。 R的输出清楚地使用了Python输出所用的不同字体,并且它的字体将该点渲染为半角。

链接地址: http://www.djcxy.com/p/78579.html

上一篇: How to fix prettytable to display chinese character properly

下一篇: Error: No module named cv2