当前位置: 首页 > 面试题库 >

使用默认等宽字体在终端窗口中对齐Unicode文本

澹台星剑
2023-03-14
问题内容

我正在从网上提取数据,并希望将其与终端窗口中的表格对齐。在大多数情况下,我可以使文本对齐很好,但是当文本包含某些符号或外来字符时,情况会变得混乱。如何处理这些字符?这是关于输出第三行问题的示例:

>>> items = "Apple tree", "Banana plant", "Orange 으르", "Goodbye"
>>> values = 100, 200, 300, 400
>>> for i, v in zip(items, values):
...     print "%-15s : %-4s" % (i, v)
... 
Apple tree      : 100 
Banana plant    : 200 
Orange 으르   : 300 
Goodbye         : 400 
>>>

注意:我正确引用了所有项目。"Orange"此处的结束引号在Stack Overflow上显示不正确,但在终端窗口中显示正常。

更新: 我为这个问题添加了赏金。我正在寻找一种无需太多额外代码也无需使用外部库即可实现的解决方案。它也应该与python
2.7+和3.x一起工作(测试版本并应用不同修复程序的条件是可以的)。而且,它不需要任何其他系统配置,也不需要更改字体或更改标准Debian /
Ubuntu安装的任何终端设置。


问题答案:

可以使用这些字符的Unicode数据中的东亚宽度属性来标识这些特殊字符的特殊行为。从编程中获取建议,以判断Unicode字符是否在终端中占用多个字符空间,并使用该值进行对齐:

#!/usr/bin/python3

import unicodedata

items = "Apple tree", "Banana plant", "Orange 으르", "Goodbye"
values = 100, 200, 300, 400
for i, v in zip(items, values):
    eawid = len(i) + sum(1 for v in i if unicodedata.east_asian_width(v) == 'W')
    pad = ' ' * (15 - eawid)
    print("%s%s : %-4s" % (i, pad, v))

给出:

Apple tree      : 100 
Banana plant    : 200 
Orange 으르     : 300 
Goodbye         : 400

如果您的浏览器对这些字符使用1.5宽度的字形,则这些字符可能看起来未对齐;在我的终端中,plan宽度与完全相同으르

语法是Python 3,但相同的技术在2.7中有效。



 类似资料:
  • 原文:Text properties and layout 基本的默认字体由一系列rcParams参数控制: rcParam 用法 'font.family' 字体名称或{'cursive', 'fantasy', 'monospace', 'sans', 'sans serif', 'sans-serif', 'serif'}的列表 'font.style' 默认字体,例如'normal','i

  • 问题内容: 在Linux终端中创建文件的最简单方法是什么? 问题答案: 根据您希望文件包含的内容: 对于一个空文件 用于包含某些命令输出的文件。 或(或) 它可以打开现有文件进行编辑,也可以创建并打开一个空文件以输入(如果不存在)

  • 我正在我的Windows 10 PC上使用Visual Studio Code。我想将我的默认终端从Windows PowerShell更改为Ubuntu上的Bash(在Windows上)。 我该怎么做呢?

  • 我正试着按照网页上robertmylne的代码设置默认字体。但是,它告诉我将代码放在App.js的构造函数中。问题是我使用了StackNavigator,据我所知我不能使用构造函数。我的代码看起来像这样: 在使用StackNavigator时,有没有办法让相关代码正常工作?

  • 问题内容: 我在Windows 7终端中使用Python解释器。 我试图围绕unicode和编码。 我输入: 问题1 :为什么字符串中使用的编码与unicode字符串中使用的编码不同? 我继续,然后键入: Question2 :我很幸运地尝试使用编码将字符串转换为unicode字符串(实际上,我首先尝试了一堆其他字符串,包括)。如何找出终端使用哪种编码来编码我的字符串? 问题3 :如何才能让终端打

  • Windows中使用的默认unicode字符编码是什么?特别是在Windows编程中(Win32和WinRT)。当我在WinAPI中编程时,“char”映射到1字节字符存储,“wchar_t”映射到2字节字符存储。如果UTF-16用4个字节编码所有超过65536的字符,那么Windows如何将这些字符映射为“wchar_t”数据类型?我知道我的问题不够清楚,但我希望你能理解我的一些担忧。非常感谢!