代码之家  ›  专栏  ›  技术社区  ›  PKey

当glassfish服务时,javascript中的utf-8文本显示不正确

  •  0
  • PKey  · 技术社区  · 6 年前

    我的脚本保存在UFT-8编码文件中:

    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('Γειά!') )打印正确的字符串。

    我错过了什么?如何使 赛伊 使用正确的编码。 谢谢。

    ps.该页面由Glassfish应用服务器提供(不确定是否重要)

    编辑1:

    也在我的 glassfish-web.xml文件 我已经宣布

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

    我还能在glasfish中做些什么来正确地服务javascript吗?

    编辑2:

    我没有提到我也在使用 struts2 jersey 有件事告诉我 struts 2 是这里的罪魁祸首。我在想,可能是实现一些过滤器来改变编码,或是执行strust指令来忽略javascript的路径,可能会解决这个问题…稍后将尝试上述操作。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Jack Bashford    6 年前

    您实际上不需要为脚本标记或脚本本身设置字符集-HTML页面上的字符集就足够了。见 this answer 更多信息。您只需在HTML页面和头部添加以下内容:

    <meta charset="utf-8 />
    

    它应该是有效的。

        2
  •  0
  •   PKey    6 年前

    通过在我的 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>
    
    推荐文章