终于可以解决了。我在 tomcat 服务器的 jsp 文件夹中保留了一个简单的 test.html 文件,其中包含 Gujrati 字符。即使那样也无法在浏览器中正确显示。相同的 html 文件被保存为 test.jsp,它也无法显示字符。所以这暗示这不是之前想的Java-MySQL组合的问题。
在同一个 ubuntu 服务器中,我们有 php server 。从托管在该 PHP 服务器中的站点,当通过同一浏览器调用时,可以正确查看这个简单的 html 页面。这表明在 Ubuntu 级别不需要更改,但在 tomcat 服务器级别需要一些配置。
解决方法如下。
1) 在 servlet 级别,我放了以下两行:
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
2) 对于jsp页面放置:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
In program generated html page added the following tag
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
3) 在 tomcat 的 server.xml 中,将 URIEncoding="UTF-8" 放入 Connector 元素中。
<Connector port="8082" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444"
URIEncoding="UTF-8"/>
4) 在 web.xml 中,我将以下内容用于 JSP 页面
<jsp-config>
<jsp-property-group>
<url-pattern>*.*</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
这样,无论放在jsp文件夹(jsp或html页面)中的什么,都可以显示unicode字符。把上面的test.html放到这个之后,test.jsp就可以正常显示字符了。但是,servlet 仍然无法显示字符。所以应用了下面提到的步骤。
5) 根据一些讨论页面的建议,我按照指定应用了一个 java 过滤器,并在 web.xml 中添加了相应的标签,如下所示。
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(){}
}
然后在 web.xml 中添加以下标签:
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>CharsetFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
应用此功能后,servlet(发送由 java 代码从 MySQL 生成的 html)现在可以在浏览器中显示古吉拉特语/印地语字符。我相信相同的技术适用于任何此类语言。
以下讨论链接帮助我解决了问题。
https://wiki.duraspace.org/pages/viewpage.action?pageId=34638116
How to get UTF-8 working in Java webapps?
UtF-8 format not working in servlet for tomcat server
https://dertompson.com/2007/01/29/encoding-filter-for-java-web-applications/