Невозможно изменить кодировку с ISO-8859-1 на UTF-8 в Glassfish 3.1 - PullRequest
7 голосов
/ 08 июня 2011

У меня проблемы с изменением кодировки в ответе моего веб-приложения с ISO-8859-1 (по умолчанию) на UTF-8. Я уже добавил опцию VM -Dfile.encoding=UTF-8 в опции JVM

Но, тем не менее, я получаю следующий HTTP-заголовок в ответ от Glassfish:

Content-Type: [...;charset=ISO-8859-1]
Server: [GlassFish Server Open Source Edition 3.1]

Буду признателен за вашу помощь / идеи.

Ответы [ 4 ]

9 голосов
/ 08 июня 2011

-Dfile.encoding - это специфическая настройка Oracle JVM для чтения исходных файлов Java.Это не имеет никакого влияния на кодировку, как указано в заголовке Content-Type ответа HTTP.

Вам необходимо добавить следующее к вашему web.xml, чтобы отправить ответ всех JSP какUTF-8 и позволить ему установить соответствующую кодировку в заголовке ответа.

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

См. Также:

4 голосов
/ 27 сентября 2012

Для шрифтов UTF-8 на Glassfish3 (файлы журналов и т. Д.):

Перейти к Server-config > JVM Settings > JVM Options > Add option (-Dfile.encoding=UTF8) .

Если вы не используете -server mode, перейдите на default-config > JVM Settings > JVM Options

2 голосов
/ 03 декабря 2013

Чтобы определить стандартную кодировку ответа, отличную от ISO-8859-1 по умолчанию для GlassFish (или Tomcat, или любого другого контейнера сервлета), вам необходимо установить фильтр, который вызывает response.setCharacterEncoding.Вот как:
1. В вашем файле web.xml определите фильтр:

<filter>
  <filter-name>Set Response Character Encoding</filter-name>
  <filter-class>com.omrispector.util.SetCharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>Set Response Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

2.Вот реализация фильтра:

package com.omrispector.util;

import javax.servlet.*;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.logging.Logger;

/**
 * Created by Omri at 03/12/13 10:39
 * Sets the character encoding to be used for all sources returned
 * (Unless they override it later)
 * This is free for use - no license whatsoever.
 */
public class SetCharacterEncodingFilter implements Filter {

  private String encoding = null;
  private boolean active = false;

  private static final Logger logger =
      Logger.getLogger(SetCharacterEncodingFilter.class.getName());

  /**
   * Take this filter out of service.
   */
  @Override
  public void destroy() {
    this.encoding = null;
  }

  /**
   * Select and set (if specified) the character encoding to be used to
   * interpret request parameters for this request.
   */
  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
                       FilterChain chain)
      throws IOException, ServletException {
    if (active) response.setCharacterEncoding(encoding);
    chain.doFilter(request, response);
  }

  /**
   * Place this filter into service.
   */
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    this.encoding = filterConfig.getInitParameter("encoding");
    try {
      Charset testCS = Charset.forName(this.encoding);
      this.active = true;
    } catch (Exception e) {
      this.active = false;
      logger.warning(encoding + " character set not supported ("+e.getMessage()+"). SetCharacterEncodingFilter de-activated.");
    }
  }
}
0 голосов
/ 03 июля 2012

Попробуйте добавить:

    <filter> 
            <filter-name>Set Character Encoding</filter-name> 
            <filter-class>filters.SetCharacterEncodingFilter</filter-class> 
            <init-param> 
                    <param-name>encoding</param-name> 
                    <param-value>UTF_8</param-value> 
            </init-param> 
    </filter> 
    <filter-mapping> 
            <filter-name>Set Character Encoding</filter-name> 
            <url-pattern>/*</url-pattern> 
    </filter-mapping>

в ваш web.xml ... Согласно http://wiki.metawerx.net/wiki/Web.xml эти разделы установят вашу кодировку в UTF_8.

...