Символы Юникода сохраняются неправильно - PullRequest
0 голосов
/ 24 сентября 2010

У меня есть база данных mysql с текстовыми строками Unicode.Мое JSF-приложение (работающее на tomcat 6) может считывать эти строки Unicode и корректно отображать их в браузере.Все html-кодировки установлены в UTF-8.

Когда я сохраняю свой объект, даже не внося изменений, Hibernate сохраняет его обратно в базу данных.Если я сейчас загляну прямо в базу данных, я вижу, что символы с акцентами стали ненужными.

Моя строка подключения к базе данных:

        <property name="hibernate.connection.url"
                  value="jdbc:mysql://database.address.com/dbname?autoReconnect=true&#38;zeroDateTimeBehavior=convertToNull&#38;useUnicode=true&#38;characterEncoding=utf8"/>

Изменение этого кодирования символов на UTF-8 вместо utf8без разницы.

На самом деле это было несколько дней назад, но сейчас это не так, и у меня нет идей, что проверить.У вас есть какие-нибудь предложения?Я могу предоставить любую дополнительную информацию, которая будет сочтена актуальной.

Ответы [ 5 ]

1 голос
/ 24 сентября 2010

Некоторые варианты решения, которые приходят мне в голову:

  • , если используются лицевые окна, укажите <?xml version="1.0" encoding="UTF-8"?> вверху страницы
  • , если используете JSP, укажите <%@ page pageEncoding="utf-8" %>
  • , если это не сработает, создайте фильтр, сопоставленный сервлету граней и выполняющий request.setCharacterEncoding("utf-8")
1 голос
/ 24 сентября 2010

Это происходит только на определенных таблицах? Возможно, CHARSET DEFAULT этих таблиц отличается от других. (http://dev.mysql.com/doc/refman/5.1/en/charset-table.html)

0 голосов
/ 13 ноября 2015

Убедитесь, что страницы в кодировке UTF-8 отображают определенные символы и отправлено правильно ...

Добавьте этот фильтр в web.xml.

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
0 голосов
/ 10 декабря 2010

В Spring самое простое решение, которое я нашел, это CharacterEncodingFilter .

 <filter>
     <filter-name>encoding-filter</filter-name>
     <filter-class>
         org.springframework.web.filter.CharacterEncodingFilter
     </filter-class>
     <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
     </init-param>
 </filter>
 <filter-mapping>
     <filter-name>encoding-filter</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>
0 голосов
/ 02 декабря 2010

У меня была такая же проблема, как и у вас, но с PostgreSQL.Вы можете использовать фильтр, как показано ниже.Это сработало для меня.Я думаю, что это должно быть лучшее решение для этого, но я еще не нашел: /

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 UnicodeFilter implements Filter {

    @Override
    public void destroy() {}

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
         // Set the characterencoding for the request and response streams.  
         req.setCharacterEncoding("UTF-8");  
         res.setContentType("text/html; charset=UTF-8");          
         chain.doFilter(req, res);    
    }  

    @Override
    public void init(FilterConfig arg0) throws ServletException {}

}

В web.xml:

<filter>
        <filter-name>utffilter</filter-name>
        <filter-class>utils.UnicodeFilter</filter-class>
</filter>
<filter-mapping>
        <filter-name>utffilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...