java - AWT 上格式错误的波斯语字符

标签 java fonts internationalization awt character

当我开始使用 JDK6 编程时,我对 文本组件 没有任何问题,无论是在 AWT 还是在 Swing 中。

但是对于 AWT 组件 的标签或标题我确实有问题。我无法在 AWT 组件上显示波斯语字符(在 Swing 中我将它们输入到源代码中)。

这是我的示例代码:

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.Properties;

public class EmptyFarsiCharsOnAWT extends JFrame{

public EmptyFarsiCharsOnAWT() {
    super("مثال");
    setDefaultCloseOperation(3);
    setVisible(rootPaneCheckingEnabled);
}
public static void main(String[] args) throws AWTException, IOException {
    JFrame jFrame = new EmptyFarsiCharsOnAWT();
    MenuItem show ;
    // approach 1 = HardCoding :
    /*
    show = new MenuItem("\u0646\u0645\u0627\u06cc\u0634");
     *
     */

    // approach 2 = using simple utf-8 saved text file :
    /*
        BufferedReader in = new BufferedReader(new FileReader("farsiLabels.txt"));
        String showLabel = in.readLine();
        in.close();

        show = new MenuItem(showLabel);
     *
     */

     // approach 3 = using properties file :

    FileReader in = new FileReader("farsiLabels.properties");
    Properties farsiLabels = new Properties();
    farsiLabels.load(in);
    show = new MenuItem(farsiLabels.getProperty("tray.show"));
    PopupMenu popUp = new PopupMenu();
    popUp.add(show);

        // creating Tray object
        Image iconIamge = Toolkit.getDefaultToolkit().getImage("greenIcon.png");

        TrayIcon trayIcon = new TrayIcon(iconIamge, null, popUp);
        SystemTray tray = SystemTray.getSystemTray();
        tray.add(trayIcon);

        jFrame.setIconImage(iconIamge);
    } 
}

这三种方法在使用 IDE 运行时都有效,但是当我制作包含此类的 JAR(通过 NetBeans > 项目 > 清理和构建)时,我没有看到预期的字符(它显示空/空白方 block )!

注意: 似乎我无法附加任何东西,所以文本文件的内容将是这样的:نمایش 和属性文件的内容:

#Sun May 02 09:45:10 IRDT 2010   
tray.show=نمایش

而且我想我必须让你知道我不久前在 SDN 上发布了这个问题。以及“Java Ranch”论坛和其他本地论坛,我还在等待......

顺便说一句,我使用的是最新版本的 Netbeans IDE...

如果有人能解决这些该死的 AWT 组件从不为我呈现任何波斯语字符的问题...

最佳答案

我怀疑这与平台有关。您的示例似乎可以在我的平台上使用 Netbeans 或命令行中的方法 1;我没有尝试其他方法。

在默认字符编码方面,IDE 和命令行之间可能存在差异。我注意到 NetBeans、Eclipse 和许多控制台可以设置为平台默认设置以外的设置。这是要检查的代码:

System.out.println(System.getProperty("file.encoding"));
System.out.println(Charset.defaultCharset().name());

你可能会看看这个相关的question ,也是。

附录:注意 show 字符串更改为与 JFrame 标题相匹配以进行比较。标题和菜单在 NetBeans 的 Run > Run Project 以及这些命令行中看起来是一样的:

$ java -cp build/classes EmptyFarsiCharsOnAWT
$ java -jar dist/test6.jar

image

import javax.swing.*;
import java.awt.*;
import java.io.*;

public class EmptyFarsiCharsOnAWT extends JFrame{

public EmptyFarsiCharsOnAWT() {
    super("مثال");
    setDefaultCloseOperation(3);
    setVisible(rootPaneCheckingEnabled);
}
public static void main(String[] args) throws AWTException, IOException {
    JFrame jFrame = new EmptyFarsiCharsOnAWT();
    MenuItem show ;
    // approach 1 = HardCoding :
    show = new MenuItem("\u0645\u062b\u0627\u0644");
    PopupMenu popUp = new PopupMenu();
    popUp.add(show);
        // creating Tray object
        Image iconIamge = Toolkit.getDefaultToolkit().getImage("image.jpg");
        TrayIcon trayIcon = new TrayIcon(iconIamge, null, popUp);
        SystemTray tray = SystemTray.getSystemTray();
        tray.add(trayIcon);
        jFrame.setIconImage(iconIamge);
    }
}

关于java - AWT 上格式错误的波斯语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2933799/

相关文章:

java - 无法替换viewpager中的 fragment

java - 创建单选按钮

web-applications - i18n 和 l10n 应该在哪一步发生?在开头还是结尾?

string - 如何在QLabels中显示国际脚本?

django - 如何更改 Django 网站中特定页面的语言

java - 在 iText 中,如何设置右列表格单元格的行距?

java - 如何更改SLF4J SimpleLogger文件名?

java - WebView Malayalam Unicode 复杂/组合字母

html - 如何使字体出现在所有设备上?

html - 服务器存储的字体与谷歌字体?