在JSP页面UTF-8编码(UTF-8 encoding in JSP page)

2019-06-18 10:39发布

我有一个JSP其页面编码页ISO-8859-1 。 该JSP页面存在一个问题的答案博客。 我想包括Q / A发布中的特殊字符。

问题是,JSP是不支持UTF-8编码,即使我已经从改成了ISO-8859-1UTF-8 这些字符( ~%&+ )正在问题。 当我单独或与任何字符的组合,这些张贴性格是storinh null在数据库中,当我删除这些字符,而发布的应用程序它工作正常。

任何一个可以提出一些解决方案?

Answer 1:

你应该用你的应用程序的所有层 相同的编码来避免这个问题。 添加它是有用的过滤器设置编码:

public void doFilter(ServletRequest request,
                     ServletResponse response,
                     FilterChain chain) throws ServletException {
   request.setCharacterEncoding("UTF-8");
   chain.doFilter(request, response);
}

如果只设置编码在JSP页面中添加此行给他们:

<%@ page contentType="text/html; charset=UTF-8" %>

配置数据库使用相同的字符编码为好。

如果你需要一个字符串见的编码转换:

  • 在编码转换的java

我不会推荐给HTML编码的文本存储在数据库中。 例如,如果你需要生成一个PDF(或以外的任何其他HTML),您需要将HTML编码先转换。



Answer 2:

完整的JSP标签应该是这样的,介意的pageEncoding太:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

一些旧的浏览器乱用的编码了。 您可以使用HTML标签

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

另外,文件应该被记录在UTF-8格式,如果你使用的是Eclipse上的文件 - >属性 - >查看左键单击 - >文本文件编码。



Answer 3:

我也有像显示的charectors问题“M U”。我增加了以下我的web.xml。

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

这解决了除头页面的问题。 试了很多办法来解决这个并没有什么在我的情况下工作。 与标题中的问题是标题JSP网页从另一个JSP包括在内。 所以给了编码的进口和解决我的问题。

<c:import url="/Header1.jsp" charEncoding="UTF-8"/>

谢谢



Answer 4:

你必须确保该文件保存使用UTF-8编码。 你可以用几个简单的文本编辑器做到这一点。 用记事本++,也就是说,你可以在菜单中选择Encoding - > Encode in UTF-8 。 你也可以做到这一点,即使Windows的记事本( Save As - >编码UTF-8)。 如果您使用的是Eclipse,你可以在文件的属性设置。

此外,检查问题是,你必须逃离这些字符。 这不会是奇怪,是你的问题,因为人物之一是&



Answer 5:

这个线程可以帮助您: 传递请求参数为UTF-8编码字符串

基本上:

request.setCharacterEncoding("UTF-8");
String login = request.getParameter("login");
String password = request.getParameter("password");

或者你使用JavaScript的JSP文件:

var userInput = $("#myInput").val();            
var encodedUserInput = encodeURIComponent(userInput);
$("#hiddenImput").val(encodedUserInput);

并在课后恢复:

String parameter = URLDecoder.decode(request.getParameter("hiddenImput"), "UTF-8");


Answer 6:

我用它解决了我所有的编码问题编码过滤器...

 package com.dina.filter;

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;

    /**
     *
     * @author DINANATH
     */
    public class EncodingFilter implements Filter {

        private String encoding = "utf-8";

        public void doFilter(ServletRequest request,ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
            request.setCharacterEncoding(encoding);
    //                response.setContentType("text/html;charset=UTF-8");
                    response.setCharacterEncoding(encoding);
            filterChain.doFilter(request, response);

        }

        public void init(FilterConfig filterConfig) throws ServletException {
            String encodingParam = filterConfig.getInitParameter("encoding");
            if (encodingParam != null) {
                encoding = encodingParam;
            }
        }

        public void destroy() {
            // nothing todo
        }

    }

在web.xml

    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>
        com.dina.filter.EncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
    </filter>
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


Answer 7:

这将帮助你。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>


Answer 8:

这是一个常见的问题。

来解决最简单的方法之一是检查特殊字符的动作层内到达,然后修改在Java代码的特殊字符。

如果您可以查看在行动或这种性格你的选择(如商业层)的任何其他Java层,只要用相应的使用HTML字符替换字符StringEscapeUtils.html#escapeHtml

做后逃逸。 使用新的字符串保存到数据库中。



Answer 9:

这是在HTML特殊字符。 你为什么不编码呢? 检查出来: http://www.degraeve.com/reference/specialcharacters.php



Answer 10:

我不得不使用特殊字符作为分隔符JSP同样的问题。 当特殊字符得到张贴到servlet,他们都弄乱。 我用下面的转换来解决这个问题:

String str = new String (request.getParameter("string").getBytes ("iso-8859-1"), "UTF-8");


Answer 11:

我添加这个shell脚本转换JSP文件从IS

#!/bin/sh

###############################################
## this script file must be placed in the parent  
## folder of the to folders "in" and "out"
## in contain the input jsp files
## out will containt the generated jsp files
## 
###############################################

find in/ -name *.jsp | 
    while read line; do 
        outpath=`echo $line | sed -e 's/in/out/'` ;
        parentdir=`echo $outpath | sed -e 's/[^\/]*\.jsp$//'` ;
        mkdir -p $parentdir
        echo $outpath ;
        iconv -t UTF-8 -f ISO-8859-1 -o $outpath $line ;
    done 


Answer 12:

感谢所有的提示。 使用Tomcat8我还添加了一个过滤器像@Jasper德弗里斯写道。 但在新的雄猫如今已经有实施的过滤器,可以在Tomcat的web.xml中使用RESP只是取消注释:

<filter>
    <filter-name>setCharacterEncodingFilter</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <async-supported>true</async-supported>
</filter>
...
<filter-mapping>
    <filter-name>setCharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

和所有其他人一样贴; 我添加URIEncoding="UTF-8"到Tomcat连接器中的Apache。 这也有帮助。

重要的是说,那Eclipse的(如果你用这个)有它的web.xml的副本,并覆盖Tomcat的设置,因为它是在这里解释: 残破的UTF-8编码的URI在JSP中



文章来源: UTF-8 encoding in JSP page
标签: java jsp utf-8