在使用Java(tomcat服务器),Ubuntu中的MySQL组合打印Gujrati或Hindi时,我面临一些挑战。我必须使用MySQL数据库中的Java生成一些html格式,该格式将通过浏览器显示。同样也将使用wkhtmltopdf以pdf格式打印。尽管我可以通过MySQL工作台在古吉拉特语的表中输入数据,但是不幸的是Java将其打印为?????
。
我已经完成以下操作:
1)更改了相应的MySQL表添加的文本列
CHARACTER SET utf8 COLLATE utf8_unicode_ci;
因此,它可以正确存储古吉拉特语/北印度语文本。
2)在jdbc URL中,我添加了
useUnicode=true&characterEncoding=utf8
在MySQL级别,我已应用
SET character_set_server=utf8mb4;
3)在我已应用的Java代码中
System.setProperty("file.encoding", "UTF-8");
它仍在返回?????
。请让我知道在Ubuntu中使用Java从MySQL数据库中获取古吉拉特语字符并通过浏览器显示它还需要什么。
预先感谢您的帮助。
答案 0 :(得分:0)
useUnicode=true&characterEncoding=utf8
->
useUnicode=yes&characterEncoding=UTF-8
您说该列现在设置为“ CHARACTER SET utf8 COLLATE utf8_unicode_ci;”。 INSERT
之后是ALTER
吗?如果以前没有,那么什么都无法解决问号。
答案 1 :(得分:0)
最终可以解决。我在tomcat服务器的jsp文件夹中保留了一个简单的test.html文件,其中包含Gujrati字符。即使这样也无法在浏览器中正确显示。相同的html文件另存为test.jsp,该文件也无法显示字符。因此,这暗示着这不是早先想到的Java-MySQL组合的问题。
在同一台ubuntu服务器中,我们有php服务器。从该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/