Путаница с кодировкой FreeMarker - PullRequest
7 голосов
/ 08 августа 2010

Когда я читаю шаблон в кодировке UTF-8 с FreeMarker, в браузере правильно отображаются специальные символы, хотя freeMarkerConfig.getDefaultEncoding() возвращает «Cp1252». Если я установлю freeMarkerConfig.setDefaultEncoding("UTF-8"), я вижу только вопросительные знаки в браузере, хотя «UTF-8» - это фактическая кодировка файла шаблона. В каждом случае отправляется заголовок http «Content-Type: text / html; charset = UTF-8».

Есть идеи, что не так?

Ответы [ 4 ]

3 голосов
/ 29 марта 2016

Установите свойство типа содержимого в FreeMarkerViewResolver.

Пример весны 4.2

@Bean
public FreeMarkerViewResolver freemarkerViewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setContentType("text/html; charset=utf-8");
    resolver.setCache(true);
    resolver.setPrefix("");
    resolver.setSuffix(".ftl.html");
    resolver.setRequestContextAttribute("rc");
    return resolver;
}
1 голос
/ 27 сентября 2016

В случае, если вы используете Spring Framework и MimeMessage для отправки электронной почты, попробуйте установить содержимое с помощью MimeMessagePreparator следующим образом (я пропускаю метод mimemessagepreparator getMessagePreparator, так как важная вещь - это как установить содержимое):

// Create the message helper from the received mimemessage on the preparator
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
// ... include the from, to, subject, freemarker html generation here... text is the String variable with generated html
// Set the content as follows instead of helper.setText(text, true);
helper.getMimeMessage().setContent(text, "text/html;charset=utf-8");

Это сработало для меня, и браузеры правильно отображают символы при отправке электронных писем.

Предполагаемые классы:

import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import javax.mail.internet.MimeMessage;

Также убедитесь, что в вашем рабочем пространстве по умолчанию используется кодировка UTF-8 для файлов шаблонов, если щелкнуть правой кнопкой мыши на их свойствах, если вы используете eclipse IDE.

Надеюсь, это поможет.

0 голосов
/ 09 августа 2010

Что ж, это определенно выглядит, несмотря на то, что вы думаете, что ваш вход кодирован в UTF-8, в действительности это действительно кодированный Cp1252. Можете ли вы перепроверить, то есть с помощью hex-редактора. Второе мнение Истао - попробуйте обработать файл шаблона в локальном файле и проверить результаты.

0 голосов
/ 08 августа 2010

Выходная кодировка соответствует кодировке вашего Java-оборудования.Если вы создадите выходной файл с UTF-FOO и передадите этот выходной файл генерации свободных маркеров, выходной кодировкой будет UTF-FOO.

См. Проблемы с набором символов .

С отл.код:

  Template templévénmts;
  BufferedWriter writ;
  OutputStreamWriter encodé;

  encodé = new OutputStreamWriter(
   new FileOutputStream(new File(f_dirDestination, résultat)), "UTF-8");
  writ = new BufferedWriter(
   encodé);
  templévénmts = f_freemarker.getTemplate(modèle);
  templévénmts.process(f_rootDatas, writ);
  writ.close();

Вы также можете использовать FileWriterWithEncoding in commons io .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...