2013-05-09 29 views
0

假设我们希望有一个非ASCII字符,例如U + 2082(下标2)。非ASCII字符在JFrame或任何Swing组件中不能正确显示

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

现在,我的问题是我无法确定确切的Unicode代码,因为确切的代码是由参数中提供的字符串确定的。该参数总是一个多原子离子 - 例如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

2083是一个十六进制值,而不是十进制。有关此角色的详细信息,请参阅the unicode page。我认为你想要的值是0x2083,或者8323

+0

击中它的头!谢谢! – collielimabean 2013-05-09 03:24:20