非ASCII字符在JFrame或任何Swing组件中无法正确显示

时间:2013-05-09 02:23:18

标签: java unicode

假设我们希望有一个非ASCII字符,例如U + 2082(下标2)。

通常,我们可以在swing组件(如JFrame)中将其显示为Character.toString('\u2082')

现在,我的问题是我无法确定确切的Unicode代码,因为确切的代码由参数中提供的String确定。该参数将始终是多原子离子 - 例如PO3。我的目标是找到“3”,将其转换成下标3(U + 2083),但也要将算法/方法抽象得足以应用于任何多原子离子(不仅仅是PO3,而且PO4也是如此)好吧),让它在JFrame上正确显示 。我在下面提供我的方法。

private static String processName(String original)
{

    char[] or = original.toCharArray();

    int returned = -1;

    for(int i = 0; i < or.length; i++)
    {

        if(Character.isDigit(or[i]))
        {
            returned = Integer.parseInt(Character.toString(or[i])); 
            or[i] = (char) (returned + 2080);
            returned = -1;
        }

    }

    return new String(or);
}

您可能正在考虑,代码看起来很干净,应该正确显示。但是,部件(char) (returned+2080)不显示符号 - 它显示一个空白框。我尝试通过设置兼容字体(GNU Unifont)来修复它,但这没有做任何事情。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

2083是 hex 值,而不是小数。有关此字符的详细信息,请参阅the unicode page。我认为你想要的值是0x2083,或8323