Мне трудно понять, как решить эту проблему:
Я разрабатываю веб-инструмент для итальянского университета, и мне нужно отображать слова с ударением (например, è, ù, ...); иногда я получаю эти слова из таблицы PostgreSql (в кодировке UTF8), но в основном мне приходится читать длинные отрывки из файла. Эти файлы кодируются в формате utf-8 xml и прекрасно отображаются в Smultron или любом редакторе utf-8 (они были созданы при разборе старых файлов python с такими сущностями, как è
вместо «è»).
Я написал класс Java, который извлекает соответствующие сегменты из файла XML, который работает следующим образом:
String s = parseText(filename, position)
если я запишу возвращенную строку в файл, все будет хорошо; проблема в том, что если я сделаю
out.write(s)
на странице jsp я получаю странные символы. Кстати, я использую
String s = getWordFromPostgresql(...)
out.write(s)
в том же JSP, и он показывает ОК.
Есть подсказка?
Спасибо
Nicola
@ krosenvold
Спасибо за ваш ответ, однако эта директива уже есть на странице, но она не работает (на самом деле она "работает", но только для строк, которые я получаю из базы данных). Я думаю, что есть что-то о чтении из файлов, но я не могу понять ... они работают в "java", но не в "jsp" (не могу придумать лучшего объяснения ...)
вот базовый пример, извлеченный из фактического кода: метод для чтения из файлов возвращает Map, от Mark (объекта, представляющего позицию в тексте) до String (содержащего текст):
это на странице .jsp (с указанием utf-директивы в постах выше)
// ...
Map<Mark, String> map = TestoMarkParser.parseMarks(...);
out.write(map.get(m));
и вот результат:
"Fu però così in uso il Genere Enharmonico, che quelli quali vi si esercitavano",
если я помещу тот же код в java-класс и заменю out.write на System.out.println, результат будет следующим:
"Fu però così in uso il Genere Enharmonico, che quelli quali vi si esercitavano",
Я провел некоторый анализ с помощью шестнадцатеричного редактора, вот он:
оригинальная строка: "fu però così"
в файле xml:
C3 B2
как показано в out.write () в файле jsp:
E2 88 9A E2 89 A4
ò как записано в файл через:
FileWriter w = new FileWriter(new File("out.txt"));
w.write(s); // s is the parsed string
w.close();
C3 B2
печать значений каждого символа в формате int
0: 70 = F
1: 117 = u
2: 32 =
3: 112 = p
4: 101 = e
5: 114 = r
6: 8730 = �
7: 8804 = �
8: 32 =
9: 99 = c
10: 111 = o
11: 115 = s
12: 8730 = �
13: 168 = �
14: 10 = `