gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:48:25 27 4
gpt4 key购买 nike

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)

enter image description here

我想要的输出格式如下。

enter image description here

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

我在prettytable.py 的def _char_block_width(char) 中添加了两行,但问题仍然存在。
if char == 0xb7:
return 2

我已经解决了,我的电脑中应该安装了prettytable.py文件d:\python33\Lib\site-packages directly not in as the form of d:\python33\Lib\site-packages\prettytable\prettytable.py
字宽不明确的汉字有很多,我们傻傻的加如下两行来修复bug,如果有50个不明确的字符,会在prettytable.py中加100行,有没有简单的方法要做到这一点?只是修复一些行来处理所有模棱两可的字符?
if char == 0xb7:
return 2

最佳答案

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

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

另一种解决方案可能是将您的控制台设置为使用对中间点字符进行更多西方处理的字体,而不是当前遵循东亚风格将其呈现为全角的字体。这意味着现有的填充是正确的。 R 的输出显然使用了与 Python 输出不同的字体,它的字体将点呈现为半角。

关于r - 如何修复prettytable以正确显示汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23027595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com