我发现在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),那么它看起来像
另外,如果答案可以对所有这些有所了解(例如,为什么会发生这种情况,那就太好了)。
答案 0 :(得分:6)
虽然它与您给出的具体示例无关(所有这些示例在Ubuntu上显示为单个字符的大小),但CJK字符具有unicode属性,表示它们比正常宽,并且显示为double某些终端的宽度。
例如,在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/
答案 1 :(得分:4)
不,因为没有办法告诉终端使用什么字体。始终使用等宽字体,学到的经验教训。
这是因为终端使用的是“单元格”字体布局引擎(即字符是在特定的X和Y坐标处打印而不管它们的实际大小),而浏览器使用的是“流”字体布局引擎(后续字符打印)前一个角色结束的地方)。
答案 2 :(得分:1)
这是OS X终端中的一个错误。
我不建议尝试解决它,因为它会在其他系统(例如Linux)上中断,并且最终可能会在Mac上得到修复。它也会使粘贴到另一个应用程序的任何人感到困惑。