UTF-8 текст в JavaScript не отображается должным образом, когда обслуживается Glassfish - PullRequest
0 голосов
/ 14 декабря 2018

Мой скрипт сохраняется в кодированном файле uft-8:

test.js

function sayhi(){

    alert('Γειά σου!')

}

В html-файле (также utf-8)Я получил :

<html>
  <head>
    <script charset="utf-8"  type="text/javascript" src="../js/mytest.js"></script>
</head>
  <body>
   ...
   <script type="text/javascript">
                alert('Γειά!')
                sayhi();
    <script type="text/javascript">
 </body>
</html>

Проблема в том, что sayhi, который должен печатать utf-8 строку - печатает нечитаемую строку, а не предупреждение над ней (alert('Γειά!')), которая печатаетправильная строка

Чего мне не хватает?Как заставить sayhi использовать правильную кодировку.Благодарю.

PS.Страница обслуживается сервером приложений Glassfish (не уверен, что это важно)

Редактировать 1:

Также в моем glassfish-web.xml Я объявил

 <parameter-encoding default-charset="UTF-8"/>

Что-нибудь еще, что я мог сделать в glasfish, чтобы правильно обслуживать javascript?

Edit 2:

Я не упомянул, что я также использую struts2 и jersey, и что-то подсказывает мне, что struts 2 является виновником здесь.Я думаю, что это может быть реализация некоторых фильтров для изменения кодировки, или директива strust для игнорирования пути с помощью javacript может решить проблему ... попробую описать выше позже.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Проблема была решена добавлением фильтра в мой web.xml

public class CharsetFilter implements Filter
{
 public static final String DESIRED_ENCODING="UTF-8";
 private String encoding;

 @Override
 public void init(FilterConfig config) throws ServletException
 {
   encoding = config.getInitParameter("appEncoding");
   if( encoding==null ) encoding=DESIRED_ENCODING;
 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
 throws IOException, ServletException
 {
  //HttpServletRequest rq=(HttpServletRequest)request;  
  //String uri=rq.getRequestURI().toLowerCase();  
  //System.out.println(""+uri);
  //this is used to fix static javascript encoding 
  if (!encoding.equals(response.getCharacterEncoding())){
    response.setCharacterEncoding(encoding);
  }
  if (!encoding.equals(request.getCharacterEncoding())){
    request.setCharacterEncoding(encoding);
  }

  next.doFilter(request, response);
 }

 public void destroy(){}
}

и в web.xml :

        <filter>
        <filter-name>CharsetFilter</filter-name>
        <filter-class>utilities.CharsetFilter</filter-class>
        <init-param>
            <param-name>appEncoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharsetFilter</filter-name>
            <url-pattern>/*</url-pattern>
       </filter-mapping>
0 голосов
/ 14 декабря 2018

На самом деле вам не нужна кодировка для тега скрипта или самого скрипта - достаточно кодировки на странице HTML.См. этот ответ для получения дополнительной информации.Все, что вам нужно добавить, это, на вашей HTML-странице и в заголовке:

<meta charset="utf-8 />

И это должно работать.

...