如何访问存储在java中的数据库或文件中的unicodes

时间:2012-05-04 15:16:52

标签: java unicode

我存储了一些单词并分配给各自的unicodes。例如:

arasu "\u0C85\u0CA5\u0CB2\u0CC1";
aadalu "\u0C86\u0CA1\u0CB2\u0CC1";

上面带有unicodes的单词存储在文本文件中。每当我们从这个文本文件中访问单词和unicodes时,它必须以“kannada”语言显示单词。 首先,我们从文本文件中访问unicode,然后将该unicode分配给一个字符串。例如,如果我们通过在java程序中读取它并将其存储到字符串'str'中从文本文件中访问第一个unicode“\ u0C85 \ u0CA5 \ u0CB2 \ u0CC1”。现在string str有unicode“\ u0C85 \ u0CA5 \ u0CB2 \ u0CC1”。如果我们在下面的代码中传递这个字符串

JFrame frame= new JFrame("TextArea frame");
GraphicsEnvironment.getLocalGraphicsEnvironment();
Font font= new Font("Tunga",Font.PLAIN,40);
JPanel panel=new JPanel();
JTextArea jt=new JTextArea(str);
jt.setFont(font);
frame.add(panel);
panel.add(jt);
frame.setSize(250,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

然后它必须以kannada语言显示输出。但现在它没有显示在kannada。它显示方框。如何解决这个问题。请帮助我们。

3 个答案:

答案 0 :(得分:0)

方框表示"所选字体不支持此字形" (字形通常是一个字符)。

大多数字体都不提供完整(= all Unicode code points)。一个原因是它们中有很多(Unicode 6.1知道249,763个代码点)。另一个是" Unicode"是一个不断发展的标准,字体不会神奇地更新"当新角色出现时自己。

您的案例中的解决方案是使用提供更多字形的字体。

如果您使用的是Windows,请尝试" Arial" - 它有相当不错的Unicode支持。

便宜的测试是下载HTML页面http://www.alanwood.net/unicode/kannada.html并将不同的字体名称放入此CSS元素中:

td.b {font-size:1.8em;}

要尝试Arial,请使用以下代码:

td.b {font-size:1.8em; font-family: Arial;}

替换字体名称,直到您对结果满意为止。如果字体名称包含空格,则需要引用名称:

td.b {font-size:1.8em; font-family: "Times New Roman";}

[编辑] jarnbjo刚才提到大多数浏览器会为你选择不同的字体,如果你想要的那个没有unicode支持(或者没有#n;支持页面。)

所以请尝试这样做:编写一个小型Java程序,调用font.canDisplay(int codePoint),其中codePoint必须是您想要的字符。从0x0CC1开始,因为它似乎是一个普通角色。如果方法返回true,则字体支持该字形。

要获取所有字体,请致电panel.getGraphis().getAvailableFontFamilyNames()以获取名称列表。尝试每一个并打印font.canDisplay( 0x0cc1 )返回true的位置。

如果你想要"最好的"字体,计算支持0x0c820xcf2之间的字符数,并按该数字对字体列表进行排序。

答案 1 :(得分:0)

这里看起来不错:

enter image description here

您确定str包含您所期望的内容,并确保在例如时间内没有字符编码问题读写文本文件?

答案 2 :(得分:0)

您的Java环境可能不包含名为" Tunga"的字体,并且您反而获得某种默认字体(不支持您需要的字形) )。

完成后

Font font= new Font("Tunga",Font.PLAIN,40);

您将某些字体,但不一定完全符合您的要求。您可以尝试记录结果以查看您的位置:

System.out.println("Font = "+font);

例如,在我的机器上,它会记录:

Font = java.awt.Font[family=Dialog,name=Tunga,style=plain,size=40]

- 它回到了#34;对话框"字体系列因为我没有" Tunga"。

你可以看看

GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

查看可供您使用的字体。