Re: problem with java displaying unicode, under ms-windows
On 7/21/2012 10:31 PM, phil@bolthole.com wrote:
Hi folks,
I'm hoping someone can tell me the magic to get java (6 or 7) to display unicode chars under ms-windows?
This is a standalone program, not an applet:
http://bolthole.com/jdrill/jdrill2_3_1.jar
The program itself works; I know this, because it displays fine under macos.
Unfortunately, the exact same jar file displays empty boxes instead of nice kanji chars, under ms-windows. Using java version 6 or 7.
Looking in the font properties type files, it seems like they are referencing ms-gothic and ms-mincho fonts. which ARE present on the system.
I see ms-gothic and ms-mincho in Control panel->fonts
And my browser successfully displays unicode pages such as
http://www.mainichi.co.jp/
So... why isnt java displaying unicode properly???
Some years ago, it was neccessary to download a special "international" version of java on windows, to display 16-bit-wide fonts.
but there does not even seem to be that option any more.
So.. what should I do?
I copied some text from www.mainichi.co.jp into Libre Office. I saved
the text as UTF-8. I used the program below to display it. It isn't
quite correct though, I get a dot before the text that wasn't on the web
page. Other than that it works fine.
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.nio.charset.*;
import javax.swing.*;
public class test extends JPanel {
private char[] buffer = new char[256];
private int n;
public test() {
setPreferredSize(new Dimension(320,240));
try {
FileInputStream fis = new FileInputStream("xxx");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
n = isr.read(buffer,0,256);
isr.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void paintComponent(Graphics g) {
g.setFont(new Font("MS Mincho",Font.PLAIN,12));
g.drawChars(buffer,0,n,10,20);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.add(new test(),BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
});
}
}