gpt4 book ai didi

python - 以编程方式判断一个 Unicode 字符是否在终端中占用多个字符空间

转载 作者:太空狗 更新时间:2023-10-29 20:19:14 26 4
gpt4 key购买 nike

我发现在 Mac OS X Terminal 中,一些 Unicode 字符占用了多个字符空间。例如 27FC(从条向右的长箭头)。它打印两个字符宽,但是第二个字符打印在下一个字符的顶部,所以你必须做 ⟼<space>以便正确打印。例如,⟼a打印像。 Arrow + a(我把字体调大了,这样你就可以看到了,但它适用于所有字体大小)。

顺便说一下,这是 Mac OS X 10.6 终端应用程序中的 Menlo 字体。

23B3 (SUMMATION TOP) 实际上打印为两个字符宽高(至少在 Safari 中,它在浏览器中也是如此,注意它如何与上面的行重叠)⎲

但是,在 Ubuntu 的终端中,这些字符都不会打印得比一个字符宽或高。

有没有一种方法可以通过编程判断一个字符是否占用了多个空格?

我使用的是 Python,因此最好是可以在纯 Python 或 POSIX 上运行的东西(即,我可以使用 os 模块调用一些 bash 命令)。

此外,我应该注意,如果我将终端字体设置中的“字符间距”设置增加到 1.5(从默认的 1.0),那么它看起来像 Arrow + a spaced .

此外,如果答案可以提供对所有这些的一些见解(即,为什么会发生?),那就太好了

最佳答案

虽然它与您提供的具体示例无关(所有这些示例在 Ubuntu 上对我来说都以单个字符的大小显示),但 CJK 字符具有 unicode 属性,表明它们比正常情况更宽,并且以双倍显示某些终端的宽度。

例如,在python中:

# 'a' is a normal (narrow) character
# '愛' can be interpreted as a double-width (wide) character
import unicodedata
assert unicodedata.east_asian_width('a') == 'N'
assert unicodedata.east_asian_width('愛') == 'W'

除此之外,我认为除了您使用的任何字体的字形大小之外,我认为没有关于某些字符应该占用多少空间的规范(由于 Ignacio 给出的原因,您的终端可能会忽略它).

有关“东亚宽度”属性的更多信息,请参阅 http://www.unicode.org/reports/tr11/

关于python - 以编程方式判断一个 Unicode 字符是否在终端中占用多个字符空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7086856/

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