【问题标题】:Unicode combining character is printed on its own (not combining with the previous character)Unicode 组合字符单独打印(不与前一个字符组合)
【发布时间】:2013-05-27 10:21:01
【问题描述】:

给定资源

<string name="squareRoot">&#x221A;x&#x0305;</string>

还有java代码

System.out.println("unicode: " + getString(R.string.squareRoot));

输出是

上划线 (x0305) 不应该在“x”之上吗? 当我尝试使用与文本相同的字符串资源作为 textView 的文本时,上划线根本不显示(它占用空间,我知道这一点,因为我试图交换'x'和上划线并在'x'之前得到一个空格')

【问题讨论】:

    标签: java android unicode textview unicode-string


    【解决方案1】:

    是的,U+0305 COMBINING OVERLINE 应该导致在前一个字符上方放置一个上划线。但是,这可能或多或少会失败有几个原因。首先,组合字符的放置需要一个好的渲染引擎(例如,如果前面的字符是大写 X,则上划线必须放在更高的位置)。其次,使用的字体可能缺少 U+0305。这可能会或可能不会导致使用后备字体,可能是在风格上与基本字体不相似的字体。第三,U+0305 并不是真正设计用作与平方根符号一起使用的纽带,因此它可能看起来放错了位置,具体取决于字体。

    在纯文本中,通常最好避免尝试使用 vinculum 生成“智能”平方根表达式。仅使用 √x 或(is x 是带运算符的表达式)√(x) 更安全,并且完全符合数学标准 ISO 80000-2。

    【讨论】:

    • @JukkaKKorpela 我明白了,但必须有一种方法可以呈现正确的数学方程,而无需重复使用额外的括号。在浏览了这么多奇怪的 unicode 字符后,如果没有专门针对平方根表达式的组合字符,我会感到惊讶。
    • 没有适当的方法在纯文本中 来呈现带有 vinculum 的激进表达式,因为这不是纯文本的用途。仅仅定义一个组合字符来连接前面的根符号是不够的,因为在数学中,radicand 几乎可以有任何东西,比如另一个部首。
    【解决方案2】:

    我认为 Android 字体没有 U+0305 的字形。 要确认(或不确认)这个理论,您可以尝试嵌入一个您知道在您的应用程序中可以使用的设备,然后尝试使用该设备。

    但即使字体有字形,文本布局引擎也可能不够聪明,无法做正确的事情。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2021-05-27
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多