Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 如何在servlet中启用读取非ascii字符_Jsp_Unicode_Servlets_Character Encoding - Fatal编程技术网

Jsp 如何在servlet中启用读取非ascii字符

Jsp 如何在servlet中启用读取非ascii字符,jsp,unicode,servlets,character-encoding,Jsp,Unicode,Servlets,Character Encoding,如何使servlet接受从JSP传递的非ascii(阿拉伯、中文等)字符 我尝试将以下内容添加到JSP顶部: <%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 我尝试添加一个过滤器来执行上述两条语句,而不是在servlet中 老实说,这些在过去是有效的,但现在不再有效了 我在Win和Linux上都使用JDK1.6上的tomcat 5.0.28/6.x.x 下面是

如何使servlet接受从JSP传递的非ascii(阿拉伯、中文等)字符

我尝试将以下内容添加到JSP顶部:

<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
我尝试添加一个过滤器来执行上述两条语句,而不是在servlet中

老实说,这些在过去是有效的,但现在不再有效了

我在Win和Linux上都使用JDK1.6上的tomcat 5.0.28/6.x.x

下面是一个例子: JSP页面:

<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Push Engine</title>
</head>
<body>
Hello ${requestScope['val']}
<form action="ControllerServlet" method="POST">
<table>
    <tr>
        <td>ABC</td>
        <td><input name="ABC" type="text" /></td>
    </tr>
    <tr>
        <td></td>
        <td><input type="submit" value="Submit"></td>
    </tr>
</table>
</form>

</body>
</html>
问题是: 在控制台中,正在打印值“?”,但是,返回到包含正确Unicode单词的JSP页面的值

打印到控制台的“?”是我运行此测试的机器中的一个问题。
我已经在另一台机器上运行了相同的示例,它工作正常

设置页面的内容类型是服务器与浏览器之间关于服务器发送内容的通信,这对您没有多大帮助。您需要确保的是客户端到服务器的通信具有正确的字符编码,并且您的服务器使用正确的语言环境运行。具体的设置方式取决于您使用的框架和服务器的配置方式;首先要做的是确保在环境中使用正确的语言环境启动服务器(可能是
LC\u ALL
变量)


请注意,客户机可能会尝试告诉服务器它需要什么语言环境,而这正是您的框架可能会帮助您的。(它将是HTTP请求中的一个头。)

说到这里,您需要设置

对于GET请求(其中参数通过请求URL传递),需要在appserver级别进行配置。例如,只需将
/conf/server.xml
元素的
URIEncoding
属性设置为
UTF-8

<Connector (...) URIEncoding="UTF-8" />
这对我有用。 我在JSP元标记中设置了charset=UTF-8,并在servlet中添加了上述代码。
在此之后,它在Oracle数据库中正确地保存了阿拉伯语数据

Ohhh,非常感谢,这正是我想要的。我的问题是因为我发送了Get请求,而不是PostSo,难道没有任何编程(与可配置相反)的方法来解决这个Get问题吗?您可以自己解析。它没有被容器解码。为了进一步抽象这一点,您可以在所有getParameter()方法上提供一个实现,该实现可以完全实现这一点。另请参阅(尽管阅读了整篇文章)。这实际上是我的系统的一个问题!谢谢
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String val = "request.getParameter('ABC') : " + request.getParameter("ABC");
        System.out.println(val);
        request.setAttribute("val", val);
        request.getRequestDispatcher("index.jsp").forward(request, response);
    }
<Connector (...) URIEncoding="UTF-8" />
if (request.getCharacterEncoding() == null) {
    request.setCharacterEncoding("UTF-8");
}
chain.doFilter(request, response);
if (request.getCharacterEncoding() == null) {     request.setCharacterEncoding("UTF-8"); }