복붙노트

[SPRING] 문자 인코딩 문제 스프링

SPRING

문자 인코딩 문제 스프링

내 웹 사이트에서 인코딩과 관련하여 큰 문제가 있습니다. 나는 spring 3, tomcat 6, 그리고 mysql db를 사용한다. 웹 사이트에서 독일어와 체코 어를 영어로 지원하고 싶습니다. 모든 JSP를 UTF-8 파일로 만들고, 각 JSP에는 다음을 포함 시켰습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

messages.properties (체코 어 기본값), messages_de.properties 및 messages_en.properties를 작성했습니다. 그리고 이들 모두는 UTF-8 파일로 저장됩니다.

web.xml에 다음을 추가했습니다.

<filter>
    <filter-name>encodingFilter</filter-name>
    <filterclass>
          org.springframework.web.filter.CharacterEncodingFilter</filterclass>
    <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>

 <locale-encoding-mapping-list>
    <locale-encoding-mapping>
        <locale>en</locale>
        <encoding>UTF-8</encoding>
    </locale-encoding-mapping>
    <locale-encoding-mapping>
        <locale>cz</locale>
        <encoding>UTF-8</encoding>
    </locale-encoding-mapping>
    <locale-encoding-mapping>
        <locale>de</locale>
        <encoding>UTF-8</encoding>
    </locale-encoding-mapping>
</locale-encoding-mapping-list>

 <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>  

그리고 applicationContext.xml에 다음을 추가합니다.

<bean id="messageSource"    
    class="org.springframework.context.support.ResourceBundleMessageSource"
    p:basenames="messages"/>

<!-- Declare the Interceptor -->
<mvc:interceptors>    
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
          p:paramName="locale" />
</mvc:interceptors>

<!-- Declare the Resolver -->
<bean id="localeResolver"  
       class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />

server.xml의 요소에서 useBodyEncodingForURI 속성을 % CATALINA_HOME % / conf 아래에 설정했습니다. 또 다른 시간에 URIEncoding = "UTF-8"을 대신 추가하려고했습니다.

charset [utf8] 및 collection [utf8_general_ci]로 모든 테이블 및 필드를 만들었습니다.

내 브라우저의 인코딩은 UTF-8 (BTW, IE8 및 Firefox 3.6.3)

MYSQL Query 브라우저를 열어 체코어나 독일의 데이터를 수동으로 삽입하면 올바르게 삽입되고 올바르게 내 앱에 표시됩니다.

그래서, 내가 가진 문제의 목록은 다음과 같습니다.

나는 실수가 어디인지 알지 못한다! 나는 사람들이 한 일을하고 그들을 위해 일 했음에도 불구하고 왜 일을 할 수없는 것일까 요! 모르겠다. ..

제발 도와주세요, 나는이 진절머리가 난 문제를 며칠 동안 붙잡 았고 그것은 나를 미치게합니다!

미리 감사드립니다.

해결법

  1. ==============================

    1.먼저 프로젝트에서 Maven을 사용하는 경우 Maven Resources Plugin에 문자 인코딩 체계로 UTF-8이 설정되어 있는지 확인하십시오. 그렇지 않으면 메시지 속성 파일이 잘못된 인코딩으로 대상에 기록 될 수 있습니다.

    먼저 프로젝트에서 Maven을 사용하는 경우 Maven Resources Plugin에 문자 인코딩 체계로 UTF-8이 설정되어 있는지 확인하십시오. 그렇지 않으면 메시지 속성 파일이 잘못된 인코딩으로 대상에 기록 될 수 있습니다.

    둘째, ISO-8859-1 인코딩 만 지원하는 표준 java.util.ResourceBundle 및 java.util.Properties를 사용하는 ResourceBundleMessageSource를 사용하고 있습니다. 대신 ReloadableResourceBundleMessageSource를 다음과 같이 사용할 수 있습니다.

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
             <property name="basename" value="classpath:messages"/>
             <property name="defaultEncoding" value="UTF-8"/>
    </bean>
    

    나는이 Cake Solutions 블로그 게시물에서 발견했습니다.

  2. ==============================

    2.그래도 여전히 작동하지 않고 응용 프로그램 서버로 Tomcat을 사용하고 있다면 server.xml의 모든 요소에 다음 옵션을 설정하십시오.

    그래도 여전히 작동하지 않고 응용 프로그램 서버로 Tomcat을 사용하고 있다면 server.xml의 모든 요소에 다음 옵션을 설정하십시오.

    <Connector URIEncoding="UTF-8" ...>
        ...
    </Connector>
    

    이것은 나를 위해 트릭을했다. 다른 응용 프로그램 서버와 유사한 옵션이있을 수 있으므로 서버 설명서를 확인하십시오.

  3. ==============================

    3.나는 봄을하지 않으므로 어둠 속에서 촬영을한다. 어쩌면 영어가 먼저 주문되고 플랫폼 / 브라우저가 영어를 기본 로케일로 사용하기 때문일까? 구성을 재정렬하고 HTTP 요청 헤더에서 accept-language를 검사하여 하나 및 기타를 제외시킵니다.

    나는 봄을하지 않으므로 어둠 속에서 촬영을한다. 어쩌면 영어가 먼저 주문되고 플랫폼 / 브라우저가 영어를 기본 로케일로 사용하기 때문일까? 구성을 재정렬하고 HTTP 요청 헤더에서 accept-language를 검사하여 하나 및 기타를 제외시킵니다.

    콘솔이 UTF-8을 사용하여 데이터를 표시하도록 구성되어 있습니까? 그렇지 않으면 플랫폼 기본 인코딩을 사용합니다. 예를 들어 Eclipse에서 Window> Preferences> General> Workspace> Text File Encoding으로 구성 할 수 있습니다.

    UTF-8로 데이터를 처리하기 위해 데이터 액세스 계층이 올바르게 구성 되었습니까? MySQL JDBC 드라이버는이 부분에서 조금 비능률적이라고 알려져 있습니다. DB 지정 인코딩은 사용하지 않지만 클라이언트 플랫폼 기본 인코딩은 사용합니다. JDBC 연결 문자열에서 useUnicode = true 및 characterEncoding = UTF-8 속성을 사용하려고합니다. 예 :

    jdbc:mysql://localhost/some_db?useUnicode=yes&characterEncoding;=UTF-8
  4. from https://stackoverflow.com/questions/3064644/character-encoding-problem-spring by cc-by-sa and MIT license