我们有一个可能显示中文文本的小程序.我们正在为其指定一种字体(Arial),在Windows和Mac OSX上都可以正常工作.
但是在Linux上的Firefox中,中文字符显示为正方形.有办法解决这个问题吗?请注意,我们不能假定客户端上存在特定字体文件.
解决方法:
这是因为Windows和Mac上的Arial都是Unicode字体,但Linux上只有Latin-1字符集.在许多Linux发行版中,中文字体是可选的,并且可能没有中文字体.
一种常见的技术是搜索所有字体以查看其中的任何一种都可以显示汉字.例如,
static final Font defaultFont =new Font( "Arial Unicode MS", Font.BOLD, 48 );
static private Font[] allFonts;
static final char sampleChineseCharacter = '\u4F60'; // ni3 as in ni3 hao3
public static void loadFonts() {
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
allFonts = env.getAllFonts();
int nFonts = allFonts != null ? allFonts.length : 0;
fontNames = new String[nFonts];
fontMap = new Hashtable();
String currentFamily = "";
int j = 0;
for ( int i = 0; i < nFonts; i++ ) {
Font font = allFonts[ i ];
System.out.println( allFonts[ i ] );
if ( font.canDisplay( sampleChineseCharacter )) {
currentFamily = font.getFamily();
Object key = fontMap.put( currentFamily, font );
if ( key == null ) {
// The currentFamily hasn't been seen yet.
fontNames[ j ] = currentFamily;
j++;
}
}
}
String tmp[] = fontNames;
fontNames = new String[j];
System.arraycopy( tmp, 0, fontNames, 0, j );
}