Это может быть решено окончательно.Я сохранил простой файл 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/