asm*_*rer 9 python unicode terminal
我发现在Mac OS X终端中,一些Unicode字符会占用多个字符空间.例如27FC(从条向右的长箭头).它打印两个字符宽,但第二个字符打印在下一个字符的顶部,所以你必须这样做?<space>才能正确打印.例如,?a打印像.
(我把字体大小设置得很大,你可以看到它,但它适用于所有字体大小).
顺便说一下,这是Mac OS X 10.6终端应用程序中的Menlo字体.
23B3(SUMMATION TOP)实际打印为两个字符宽和高(至少在Safari中,它也在浏览器中执行此操作,注意它与上面的行重叠)⎲
但是,在Ubuntu的终端中,这些字符中没有一个比一个字符打印更宽或更高.
有没有办法以编程方式判断角色是否占用多个空格?
我正在使用Python,所以在纯Python或POSIX上工作的东西(即,我可以使用os模块调用一些bash命令)将是首选.
此外,我应该注意,如果我将终端的字体设置中的"字符间距"设置增加到1.5(从默认的1.0),那么它看起来像
.
此外,如果答案能够对所有这些有所了解(例如,为什么会发生这种情况,那就太好了)
虽然它与您给出的具体示例无关(所有这些示例都以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'
Run Code Online (Sandbox Code Playgroud)
除此之外,我认为没有规定某些角色占用多少空间,除了你使用的任何字体的字形大小(你的终端可能忽略了因为Ignacio给出的原因).
有关"东亚宽度"属性的更多信息,请访问http://www.unicode.org/reports/tr11/
不,因为无法知道终端正在使用什么字体。吸取教训,始终使用等宽字体。
发生这种情况是因为终端使用“单元格”字体布局引擎(即字符打印在特定的 X 和 Y 坐标,无论其实际大小如何),而浏览器使用“流”字体布局引擎(后续字符打印在前一个字符的位置)字符结束)。