java程序无法在ubuntu中从mysql打印印地语、gujrati

6xfqseft  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(274)

在ubuntu中使用java(tomcat服务器)和mysql组合打印gujrati或hindi时,我遇到了一些挑战。我必须产生一些html格式使用java从mysql数据库将通过浏览器显示。同样的内容也将使用wkhtmltopdf以pdf格式打印。虽然我可以通过mysql workbench在gujarati的表中输入数据,但不幸的是java将其打印为 ????? .
我做了以下工作:
1) 修改了对应mysql表的文本列

CHARACTER SET utf8 COLLATE utf8_unicode_ci;

因此,它可以正确地存储古吉拉特语/印地语文本。
2) 在jdbcurl中,我添加了

useUnicode=true&characterEncoding=utf8

在mysql级别,我已经申请了

SET character_set_server=utf8mb4;

3) 在我应用的java代码中

System.setProperty("file.encoding", "UTF-8");

它还在回来 ????? . 请让我知道还有什么需要从mysql数据库中提取gujrati字符在ubuntu中使用java并通过浏览器显示它。
事先谢谢你的帮助。

iovurdzv

iovurdzv1#

useUnicode=true&characterEncoding=utf8

-->

useUnicode=yes&characterEncoding=UTF-8

您说该列现在设置为“character set utf8 collate utf8\u unicode\u ci;”。是的 INSERT 完成后 ALTER ? 如果是以前的话,那么没有什么能解决这些问号。

b09cbbtk

b09cbbtk2#

最终可以解决。我在tomcat服务器的jsp文件夹中保存了一个包含gujrati字符的简单test.html文件。即使这样也无法在浏览器中正确显示。同样的html文件被保存为test.jsp,它也不能显示字符。因此,这暗示了这不是一个javamysql组合的问题。
在同一个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
如何让utf-8在javawebapps中工作?
utf-8格式在tomcat服务器的servlet中不起作用
https://dertompson.com/2007/01/29/encoding-filter-for-java-web-applications/

相关问题