【问题标题】:Java program unable to print Hindi , Gujrati from MySQL in UbuntuJava 程序无法在 Ubuntu 中从 MySQL 打印印地语、古吉拉特语
【发布时间】:2019-05-06 07:04:10
【问题描述】:

我在使用 Java(tomcat 服务器)打印古吉拉特语或印地语时面临一些挑战,Ubuntu 中的 MySQL 组合。我必须使用 MySQL DB 中的 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 数据库中获取 Gujrati 字符并通过浏览器显示它还需要什么。

提前感谢您的帮助。

【问题讨论】:

  • 你用什么字体渲染你的输出?许多字体没有针对所有语言的完整字符集。
  • 我在这里看到的唯一 Java 是对 System.setProperty 的调用。编辑您的问题并包含读取数据的代码和显示数据的代码。

标签: java mysql tomcat utf-8


【解决方案1】:
useUnicode=true&characterEncoding=utf8

-->

useUnicode=yes&characterEncoding=UTF-8

您说该列现在设置为“CHARACTER SET utf8 COLLATE utf8_unicode_ci;”。 INSERT 是在 ALTER 之后完成的吗?如果是以前,那么没有什么可以解决问号的。

【讨论】:

  • 更改列后插入数据。在表中它完美地显示出来。我已将 useUnicode 更改为 yes 但还没有运气。
  • @SudeshnaBhattacharya - 让我们用SELECT col, HEX(col) ... 检查表中的数据。请向我们展示如何执行提取操作。
  • 非常感谢瑞克的帮助。问题实际上出在 tomcat 上。我今天已经解释过了,
【解决方案2】:

终于可以解决了。我在 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/

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 2012-01-28
    • 2017-02-16
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多