如何修复prettytable以正确显示汉字

如何修复prettytable以正确显示汉字,r,python-3.x,prettytable,R,Python 3.x,Prettytable,我想要的输出格式如下所示 在本例中,prettytable.py无法正确显示中字符·的中文歧义宽度买买提江·阿布拉,字符的宽度不明确。如何修复prettytable.py中的错误 我在prettytable.py的def_char_block_width(char)中添加了两行,但问题仍然存在 from prettytable import PrettyTable header="乘客姓名,性别,出生日期".split(",") x = PrettyTable(header) x.align

我想要的输出格式如下所示

在本例中,prettytable.py无法正确显示
中字符
·
的中文歧义宽度买买提江·阿布拉,字符的宽度不明确。如何修复prettytable.py中的错误


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

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应该直接安装在我的计算机d:\python33\Lib\site packages
中,而不是以d:\python33\Lib\site packages\prettytable\prettytable.py的形式安装

有许多宽度不明确的汉字,我们添加两行(如下面所示)来修复错误是愚蠢的,如果有50个不明确的字符,将在prettytable.py中添加100行,有简单的方法吗?只是修正一些行来处理所有的歧义字符

if char == 0xb7:
    return 2 

您遇到的问题与Python输出中填充错误的行中的点字符有关。该点为Unicode码点
U+00B7·中间点
。此字符被认为具有“不明确”的宽度,因为它在大多数非东亚字体中是窄字符,但在大多数亚洲字体中呈现为全宽度。没有上下文,程序无法判断它在屏幕上的显示宽度。不幸的是,Python的Unicode系统似乎没有任何方式来提供这种上下文

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


另一个解决方案是将控制台设置为使用更西方化的中点字符处理字体,而不是当前采用东亚风格的全宽字体。这意味着现有的填充是正确的。R的输出明显使用了Python输出所使用的不同字体,其字体将圆点呈现为半宽。

这可能有助于我阅读文章,使用一组可打印ASCII字符的全宽版本不是一个好主意,我发现R中没有显示各种字符的问题,python需要向R学习才能创建精细的显示。现在,我想知道R是怎么做的?谁能帮我修改prettytable源代码中的bug?我已经试着理解了源代码,对我来说很难掌握。代码的相关部分是。问题是如何处理歧义。如果您只需要一个粗略的补丁供自己使用,您可以简单地添加
0xB7
,作为一个额外的案例,将其视为宽度2,但这可能不是上游人员所关心的。更好的解决方案是向width函数传递一些额外的参数,告诉它是否在东亚环境中,但这需要更多的工作才能进行设置:但问题仍然存在。如果char==0xb7:返回2@it_is_a_literature:当我将您引用的两行添加到我的
prettytable
模块副本中时,我得到正确间隔的输出。只要你把新行放在
#猜测一下
注释和下面的
return
语句上面,它就应该可以工作了。我已经下载了文件并将这两行添加到了(char\u block\u width)中,现在如何安装它呢?我在
D:\python33\Lib\site packages\prettytable
中创建了一个新的目录,并将文件另存为
D:\python33\Lib\site packages\prettytable
中的prettytable.py,当我从prettytable import prettytable运行>>>时,错误是:回溯(最近一次调用):文件“”,第1行,在ImportError中:无法导入名称prettytable
if char == 0xb7:
    return 2