Java Native语言应用程序在IDE外部无效

时间:2011-04-22 04:38:48

标签: java swing netbeans fonts

我有一个使用netbeans在java下开发的程序。它有一个文本窗格,用非英语语言编写文本并执行一些操作,包括save open new .....

当我从netbeans运行它时,该程序很好并且完美无缺地工作。但是当我进入dist文件夹并运行jar(它应该是可执行文件)时它运行良好但是当我打开以前保存的文件到编辑器时它会显示神秘的字体。

像 -

লিখ“原始输入是”<< নতুন_লাইন; চলবে(সংখ্যাপ= 0;প<যতটা;প++)

变为

à|||||||| - “原始输入是”<< à|¨à|¤à§à|¨_à|²à|¾à|‡à|¨; à|šš|²à|¬§§‡(à|¸à|,à|-ৠà|¯à||||| =à§|;à|ª<à|¯à|¤à|Ÿà |¾;à|ª++)

另一件有趣的事情是。如果我在编辑器中输入它也可以正常工作(没有字体问题)。

我正在使用这两个函数来读写文件

public void writeToFile(String data,String address)
{
      try{
          // Create file 
    FileWriter fstream = new FileWriter(address);
        BufferedWriter out = new BufferedWriter(fstream);
    out.write(data);
    //Close the output stream
    out.close();
    }catch (Exception e){//Catch exception if any
      System.err.println("Error: " + e.getMessage());
    }

}


public String readFromFile(String fileName) {
   String output="";
    try {
     File file = new File(fileName);
     FileReader reader = new FileReader(file);
     BufferedReader in = new BufferedReader(reader);
     String string;
     while ((string = in.readLine()) != null) {
       output=output+string+"\n";
     }
     in.close();
   } catch (IOException e) {
     e.printStackTrace();
   }
    return output;
 }

我已经将文本窗格的字体设置为vrinda,就像我提到的那样在IDE中工作。

请帮我弄清楚是什么问题。

当需要原生支持时,我需要做些什么才能发布JAR?


2 个答案:

答案 0 :(得分:2)

尝试更改您的读取逻辑以使用允许设置编码的InputStreamReader:

InputStreamReader inputStreamReader = 
  new InputStreamReader(new FileInputStream (file), "UTF-8" );

同时更改您的写入逻辑以使用OutputStreamWriter,它允许设置编码:

OutputStreamWriter outputStreamWriter = 
  new OutputStreamWriter(new FileOutputStream (file), "UTF-8" );

答案 1 :(得分:2)

根本问题是您当前的应用程序正在使用“platform default”字符集/字符编码来读取文件。当您从命令行和NetBeans运行时,这显然是不同的。在前一个原因中,它取决于主机操作系统或当前shell的区域设置...取决于您的平台。在NetBeans中,它似乎默认为UTF-8。

@Andrey Adamovich的回答解释了如何在使用文件阅读器打开文件或使用输入流阅读器调整字节流时指定字符编码。