我用netbeans在java下开发了一个程序。它有一个文本窗格,可以接收以非英语语言编写的文本,并执行一些操作,包括保存打开新.....
程序很好,当我从netbeans运行它时,它完美无缺。但是当我转到dist文件夹并运行jar(这应该是可执行文件)时,它运行良好,但当我打开以前保存的文件到编辑器时,它显示神秘的字体。
,
原始输入为"<<নতুন_লাইন;চলবে(সংখ্যাপ=০;প& lt;যতটা;প+ +)
是
ω ω²ω ω ω - "原始输入为" <<一个¦¨一¦¤一§�一个¦¨_a¦²一¦¾一¦‡一¦¨;一个¦š一¦²一¦¬一§‡(一个¦¸¦,¦——§�一个¦¯一¦¾一¦ª= a§¦;一个¦ª& lt;一个¦¯一¦¤一¦ÿ一¦¾;一个¦ª+ +)
还有一件有趣的事是……如果我在编辑器中输入,它也可以正常工作(没有字体问题)。
我使用这两个函数来读取和写入文件
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吗?
尝试改变你的阅读逻辑使用InputStreamReader允许设置编码:
InputStreamReader inputStreamReader =
new InputStreamReader(new FileInputStream (file), "UTF-8" );
也改变你的写作逻辑使用OutputStreamWriter允许设置编码:
OutputStreamWriter outputStreamWriter =
new OutputStreamWriter(new FileOutputStream (file), "UTF-8" );
根本问题是您当前的应用程序正在使用"平台默认"字符集/字符编码读取文件。当您从命令行和NetBeans运行时,这显然是不同的。在前一个原因中,它取决于主机操作系统或当前shell的区域设置…这取决于你的平台。在NetBeans中,它似乎默认为UTF-8。
@Andrey Adamovich的回答解释了如何在使用文件阅读器打开文件或使用输入流阅读器调整字节流时指定字符编码。