Удовлетворены ли вы исключением, которое может быть выбрано? Возможно, ваш сервлет не имеет права на запись в файл. Я бы попытался отладить вашу программу, чтобы узнать, что произойдет, когда этот код запущен.
Что вы делаете, это повредит многие символы, но вы все равно должны получить файл.
Когда я запускаю этот код я получаю файл с
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=قسيمات
, как и ожидалось.
Вы уверены, что вопросительные знаки не присутствуют в файле исходного кода сервлета после того, как вы скопировали и наклеили фрагмент? – mgaert
@Peter Lawrey: Я получаю правильный вывод, когда создаю новый файл. Но при добавлении есть проблемы в письменной форме и в кодировке. – 1355
@ 1355 Я не вижу, как будет работать ваша кодировка. Вы пробовали код, который я предложил? Это работает при добавлении (как я показал) –