gpt4 book ai didi

python - 在 python 中对齐 unicode 字符的问题

转载 作者:行者123 更新时间:2023-12-04 10:14:49 24 4
gpt4 key购买 nike

我正在尝试让垂直条在以下程序的输出中对齐

print('𝒩  |\n   |')

特殊的'N'是U+1D4A9。

在我的终端中使用 ipython(我使用的是 Ubuntu)对齐很好:

enter image description here

但如果我在 spyder 中运行完全相同的代码,输出将不会对齐:

enter image description here

请注意,我在两个示例 (Ubuntu Mono 12) 中使用了完全相同的字体和字体大小。我还尝试通过插入所有类型的不同大小的 unicode 空格来使其对齐,但没有成功。我还测试了 jupyter,它也没有对齐。

我的主要问题是如何让它在终端和 spyder/jupyter 中对齐。知道为什么它现在不对齐也很有趣,因为我使用的是完全相同的字体。字体渲染器的差异?

这也是终端的文本输出(在我的浏览器中看起来有点错位):

In [1]: print('𝒩  |\n   |')                                                                                                                                               
𝒩 |
|

最佳答案

这是当前基于单元格终端的 Qt 输出中的一个问题,因为不同宽度的字符没有与终端使用的单元格网格正确对齐。一种解决方法是尝试使用其他定位字符来强制对齐,而不是简单地打印非标准字符。两个这样的字符是 \t\b - \t - “制表符”字符会将打印转发到下一个“制表位” - 默认情况下,8 个“单宽字符单元格”的倍数。也就是说,使用:print('𝒩\t|\n\t|') - 这是我在 Konsole(另一个基于 Qt 的终端)中得到的:

Ipython session on konsole depicting  the use of <code>\t</code> for alignment

(\b 字符的意思是“退格键”——所以我打印了其中的 4 个以“返回”4 个单宽单元格以接近您的想法)

使用终端库

另一个选项,如果你想要一个具有复杂布局的交互式应用程序(比如显示颜色,接受用户输入而不必等待“输入”被按下),如果使用 terminedia 则非常合适。图书馆(免责声明:我是这个项目的作者)。

它允许您将终端明确地作为网格处理,并且将“知道”何时打印非标准宽度的字符并将它们的宽度“舍入”为两个单元格。

因此,为了使用 terminedia 显示相同的内容,我实例化了一个“屏幕”对象,它允许我在确切位置使用 print_at - 我使用的完整代码是:

import terminedia as TM
sc = TM.Screen()
sc.print_at((0, 10),'𝒩 |', color="red")
sc.print_at((0,11), ' | ', color="red")
sc.update()

要安装terminedia,使用pip install git+https://github.com/jsbueno/terminedia.git(抱歉,我没有发布新版本是我的错)

Output created using terminedia

关于python - 在 python 中对齐 unicode 字符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61121289/

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