Java-программа не может печатать хинди, гуджрати из MySQL в Ubuntu - PullRequest
0 голосов
/ 04 декабря 2018

Я сталкиваюсь с некоторыми трудностями при печати гуджрати или хинди с использованием Java (tomcat server), комбинации MySQL в Ubuntu.Я должен создать некоторый формат HTML с использованием Java из БД MySQL, который будет отображаться через браузер.То же самое будет напечатано в формате pdf с использованием wkhtmltopdf.Хотя я мог вводить данные в таблицу в гуджарати через MySQL, но, к сожалению, Java печатает их как ?????.

. Я сделал следующее:

1) Изменил текстовый столбец соответствующегоДобавление таблицы MySQL

CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Следовательно, он может правильно хранить текст гуджарати / хинди.

2) В URL-адресе jdbc я добавил

useUnicode=true&characterEncoding=utf8

В MySQLУровень, который я применил

SET character_set_server=utf8mb4;

3) В коде Java, который я применил

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

Он все еще возвращает ?????.Пожалуйста, дайте мне знать, что еще нужно для извлечения символа гуджрати из базы данных MySQL с помощью Java в Ubuntu и отображения его через браузер.

Заранее спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Это может быть решено окончательно.Я сохранил простой файл test.html, содержащий символ Gujrati, в папке jsp сервера tomcat.Даже это не может быть отображено в браузере.Тот же HTML-файл был сохранен как test.jsp, который также не мог отображать символы.Таким образом, это намекало на то, что это не было проблемой комбинации Java-MySQL, как считалось ранее.

На том же сервере Ubuntu у нас есть php-сервер.С сайтов, размещенных на этом PHP-сервере, эту простую HTML-страницу можно правильно просматривать при вызове через тот же браузер.Это дало понять, что на уровне Ubuntu никаких изменений не требуется, но на уровне сервера tomcat требуется некоторая конфигурация.

Способ ее разрешения описан ниже.

1) На уровне сервлета я поставил следующие две строки:

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) В файле server.xml tomcat укажите 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), могло отображать символы Юникода,После добавления вышеупомянутого test.html test.jsp может правильно отображать символы.Однако сервлет все еще не мог отображать символы.Таким образом, следующие шаги были применены.

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>

После применения этого сервлет (который отправлял html, сгенерированный из MySQL с помощью кода java) теперь может отображать символы гуджарати / хинди в браузере.Я полагаю, что та же самая техника применима для любых таких языков.

Следующие ссылки для обсуждения помогли мне решить проблему.

https://wiki.duraspace.org/pages/viewpage.action?pageId=34638116

Как получить UTF-8 работает в веб-приложениях Java?

Не работает формат UtF-8 в сервлете для сервера tomcat

https://dertompson.com/2007/01/29/encoding-filter-for-java-web-applications/

0 голосов
/ 05 декабря 2018
useUnicode=true&amp;characterEncoding=utf8

->

useUnicode=yes&characterEncoding=UTF-8

Вы говорите, что для столбца теперь установлено значение "CHARACTER SET utf8 COLLATE utf8_unicode_ci;".Было ли INSERT сделано после ALTER?Если это было раньше, то ничто не может исправить вопросительные знаки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...