2012-08-01 2 views
13

내 모델 개체를 유지하면서 UTF-8 인코딩 문제가 발생합니다. 터키어로 'ı'는 편지입니다. 또한 UTF-8 인코딩에 포함 된 다른 터키 문자가 있습니다. 내 모델 객체를 유지하는 동안 'ı'문자는 모두 ''으로 유지됩니까? '을 DB에 저장합니다. 나는 우분투 리눅스 64 비트 OS에서 MySQL 5.5를 사용하고있다.. 또한 저는 이미 최대 절전 모드 & c3p0 연결 인코딩 속성을 UTF-8로 설정했습니다. 디버깅 할 때 클라이언트의 데이터가 사실입니다.개체를 지속하는 동안 Hibernate가 잘못 인코딩 됨 [UTF-8]

내 설정은 다음과 같습니다. 누군가 나를 도울 수 있다면 기쁠 것입니다.

미리 감사드립니다.


봄 & 최대 절전 모드 구성

<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> 

답변

31

데이터 소스의 인코딩

<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> 

양식의 입력이 올바르게 인코딩 되었습니까? 스프링 응용 프로그램에서 필터를 사용합니까? 응용 프로그램을 디버그 모드로 실행하고 모델 개체의 필드를 확인한 후에 유지하십시오.

필터는 web.xml 파일에 beplaced한다 : 당신이

characterEncoding = UTF-8

매개 변수 연결 문자열에 추가 한 경우

<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

해결 된 문제 해결을 위해 charachter 인코딩을 추가했습니다. – talha06

+0

모든 Hibernate 및 MySQL 구성을 시도한 후 해당 필터 방식이 작동했습니다. 감사! –

+2

당신은 나의 날을 구했다 ... 매력처럼 작동한다. .. – Babu

0

확인은 콩에 저장된 데이터 것입니다. 빈이 어떻게 채워지습니까? 사용자 입력을 통해 전달됩니까? 그렇다면 해당 페이지에서 UTF-8로 인코딩을 작성하고 요청 및 응답 매개 변수를 UTF-8로 변경해야합니다.

+0

불행히도이 오류를 해결하지 못했습니다. – talha06

1

결과적으로 (db 및 테이블이 이미 작성된 후) 데이터베이스를 다시 작성해야합니다. 사실 내 경우에는 내 데이터베이스를 다시 만들었습니다.

CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;

또는

ALTER 데이터베이스 MY_DATABASE 기본 문자 세트 UTF8의 부씩 utf8_general_ci;

키릴 문자 문자열을 사용하고 있습니다.