以下代码将数据附加到java应用程序中的给定文件。但是当将此代码放在servlet中时,该文件将变为空。为什么这样?
try {
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("C:\\root.properties", true), "UTF-8");
BufferedWriter fbw = new BufferedWriter(writer);
String s = "root.label.1130.2=قسيمات";
fbw.write(new String(s.getBytes("iso-8859-1"), "UTF-8"));
fbw.newLine();
fbw.close();
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
答案 0 :(得分:2)
该字符串在等号后面包含非ISO-8859-1字符。
您可能想要检查Java编译是否接受UTF-8输入,即javac -encoding UTF-8
。另外,在getBytes()
中将“iso-8859-1”替换为“UTF-8”。
请参阅http://illegalargumentexception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html#javaencoding_sourcefiles以获得一个很好的文章和其他编码常量字符串的方法。
答案 1 :(得分:1)
你确定你看到任何可能抛出的异常吗?也许你的servlet没有写入文件的权限。我会尝试调试你的程序,看看运行这段代码会发生什么。
你正在做的事情会破坏很多角色,但你仍然应该得到一个文件。
当我运行此代码时,我得到一个带
的文件root.label.1130.2=??????
这是你期望得到的。
如果我运行此代码
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("root.properties", true), "UTF-8"));
String s = "root.label.1130.2=قسيمات";
pw.println(s);
pw.close();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("root.properties"), "UTF-8"));
String line;
while ((line = br.readLine()) != null) {
for (int i = 0; i < line.length(); i++) {
char ch = line.charAt(i);
if (ch >= ' ' && ch < 127)
System.out.print(ch);
else
System.out.printf("\\u%04x", (int) ch);
}
System.out.println();
}
打印以下内容,显示阿拉伯字符未被删除。
root.label.1130.2=\u0642\u0633\u064a\u0645\u0627\u062a
该文件现在包含
root.label.1130.2=قسيمات
正如所料。