我有一个 Java Servlet,它通过 ajax javascript 从 HTML 接收数据。 Html 接收来自用户的印地文文本,并通过 ajax 将其发送到 servlet 中。我在所有地方都指定了 UTF-8 格式,但它不起作用。
我已将请求和响应编码设置为 utf-8 ,但仍然无法正常工作。 服务器是Tomcat。
如果有人能帮忙。
最佳答案
按照以下步骤配置您的 Tomcat 以正确地提供您的 UTF-8 页面,无论是波斯语、阿拉伯语还是任何从右到左书写的语言:
(1) 按如下方式编辑您的 server.xml
2) CharsetFilter 强制 java webapp 以 UTF-8 编码处理所有请求和响应。这需要我们定义一个字符集过滤器,如下所示:
包charsetFilter.classes;
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;
public class CharsetFilter implements Filter{
private String encoding;
public void init(FilterConfig config) throws ServletException{
encoding = config.getInitParameter("requestEncoding");
if( encoding==null ) encoding="UTF-8";
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
throws IOException, ServletException{
if(null == request.getCharacterEncoding())
request.setCharacterEncoding(encoding);
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
next.doFilter(request, response);
}
public void destroy(){}
}
此过滤器确保如果浏览器未设置请求中使用的编码,则将其设置为 UTF-8。这个过滤器做的另一件事是设置默认响应编码,即。返回的 html/无论是什么的编码。另一种方法是在应用程序的每个 Controller 中设置响应编码等。
3) 然后将此过滤器添加到 web.xml 中,例如:
字符集过滤器 charsetFilter.classes.CharsetFilter 请求编码 UTF-8编码
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后将您的 servlet 编写为:
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
并在您的 servlet 中使用您想要使用的任何语言。
您可以使用它来获取参数:
String input = new String(request.getParameter("foo").getBytes("iso-8859-1"), "utf-8");
干杯!
关于java - UtF-8 格式在 tomcat 服务器的 servlet 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34326993/