Java程序无法从Ubuntu中的MySQL打印Hindi和Gujrati

时间:2018-12-04 19:16:37

标签: java mysql tomcat utf-8

在使用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数据库中获取古吉拉特语字符并通过浏览器显示它还需要什么。

预先感谢您的帮助。

2 个答案:

答案 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/