Вывод специального символа FreeMarker в виде знака вопроса
Я пытаюсь отправить форму с полями, содержащими специальные символы, такие как €ŠšŽžŒœŸ
, Насколько я вижу на странице википедии ISO-8859-15, эти символы включены в стандарт. Несмотря на то, что кодировка для запроса и ответа установлена в ISO-8859-15, когда я пытаюсь отобразить значения (используя FreeMarker 2.3.18 в среде JAVA EE), значения ???????
, Я установил принятую кодировку формы в ISO-8859-15
, Я проверил, что форма отправлена с типом контента text/html;charset=ISO-8859-15
(используя firebug), но я не могу понять, как отображать правильные символы. Если я запускаю следующий код, отображается правильное шестнадцатеричное значение (ex: Ÿ = be)
,
Что мне не хватает? Заранее спасибо!
System.out.println(Integer.toHexString(myString.charAt(i)));
РЕДАКТИРОВАТЬ:
У меня есть следующий код при обработке запроса:
PrintStream ps = new PrintStream(System.out, true, "ISO-8859-15");
String firstName = request.getParameter("firstName");
// check for null before
for (int i = 0; i < firstName.length(); i++) {
ps.println(firstName.charAt(i)); // prints "?"
}
BufferedWriter file=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), "ISO-8859-15"));
file.write(firstName); // writes "?" to file (checked with notepad++, correct encoding set)
file.close();
1 ответ
Согласно шестнадцатеричному значению данные формы отправляются правильно. Проблема, похоже, связана с выходом. Java заменяет символ ?
если он не может быть представлен с использованием кодировки.
Вы должны использовать правильный набор символов при построении выходного потока. Какие команды вы используете для этого? Я не знаю FreeMarker, но, вероятно, будет что-то вроде
Writer out = new OutputStreamWriter(System.out);
Это должно быть заменено чем-то похожим на это:
Writer out = new OutputStreamWriter(System.out, "iso-8859-15");
Кстати, UTF-8 обычно гораздо лучший выбор для кодировки кодировки.