2012-08-01 6 views
13

Mam do czynienia z problemem kodowania UTF-8, a jednocześnie utrzymuję obiekty modelu. W języku tureckim "ı" jest literą. Istnieje również kilka innych tureckich znaków zawartych w kodowaniu UTF-8. Podczas gdy utrzymuję obiekty modelu, wszystkie znaki "ı" są zachowywane jako "? "do DB. Używam MySQL 5.5 w systemie Ubuntu Linux 64-bit OS. Również już ustawiłem hibernację & właściwości kodowania połączenia c3p0 również na UTF-8. Podczas debugowania dane pochodzą od klienta.Hibernuj koduje nieprawidłowo, podczas gdy pozostałe obiekty [UTF-8]

Oto mój config i będę bardzo szczęśliwy, jeśli ktoś może mi pomóc.

Z góry dziękuję.


Wiosna & Hibernate Config

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource"><ref local="dataSource"/></property> 
     <property name="packagesToScan" value="com.tk.dms.model" /> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.use_sql_comments">true</prop> 
       <prop key="hibernate.format_sql">false</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.generate_statistics">true</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> 
       <prop key="hibernate.connection.characterEncoding">UTF-8</prop> 
       <prop key="hibernate.connection.useUnicode">true</prop> 
       <!-- c3p0 properties --> 
       <prop key="hibernate.c3p0.min_size">2</prop> 
       <prop key="hibernate.c3p0.max_size">50</prop> 
       <prop key="hibernate.c3p0.maxPoolSize">50</prop> 
       <prop key="hibernate.c3p0.minPoolSize">2</prop> 
       <prop key="hibernate.c3p0.initialPoolSize">2</prop> 
       <prop key="hibernate.c3p0.timeout">300</prop> 
       <prop key="hibernate.c3p0.max_statements">50</prop>     
      </props> 
     </property> 
    </bean> 

Odpowiedz

31

Spróbuj ustawić kodowanie w źródle danych

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName"> 
     <value>com.mysql.jdbc.Driver</value> 
    </property> 
    <property name="url"> 
     <value>jdbc:mysql://127.0.0.1:3306/databaseName?characterEncoding=UTF-8</value> 
    </property> 
    <property name="username"> 
     <value>?</value> 
    </property> 
</bean> 

Jesteś również pewien, że dane wejściowe z formularzy są poprawnie zakodowane? Czy używasz filtru w swojej wiosennej aplikacji? Uruchom aplikację w trybie debugowania i sprawdź pola obiektu modelu, zanim się utrzymasz.

Filtr powinien beplaced w pliku web.xml:

<filter> 
    <filter-name>SetCharacterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>SetCharacterEncodingFilter</filter-name> 
    <url-pattern>*</url-pattern> 
</filter-mapping> 
+1

dziękuję bardzo pawelccb, dodając kodowanie charachtera do url rozwiązanego problemu .. – talha06

+0

Po wypróbowaniu wszystkich konfiguracji Hibernate i MySQL, ta metoda filtrowania zadziałała. dzięki! –

+2

Uratowałeś mi dzień ... działa jak czar ... – Babu

0

Sprawdź, co jest dane przechowywane w fasoli. Jak jest wypełniony Twój bobas ?, czy to przez wejście użytkownika ?, jeśli tak, to musisz również zapisać kodowanie na tej stronie jako UTF-8 i zmienić parametr żądania i odpowiedzi na UTF-8

+0

Mam filtr do tego, niestety to nie rozwiąże tego błędu .. – talha06

1

Jeśli dodawany

characterEncoding = UTF-8

parametr ciągu połączenia? w związku z tym (po utworzeniu bazy danych i tabel) należy ponownie utworzyć bazę danych. Właściwie w moim przypadku ponownie utworzyłem bazę danych za pomocą:

TWORZENIE BAZY DANYCH nazwa_bufry CHARACTER SET utf8 COLLATE utf8_general_ci;

LUB

alter bazie domyślny my_database charset utf8 sortowania utf8_general_ci;

Zauważ, że używałem cyrylicy.

Powiązane problemy