2010-06-22 10 views
3

프랑스 클라이언트 용으로 몇 가지 작업을하고 있으므로 악센트 부호가있는 문자를 처리해야합니다. 하지만 난 많은 어려움을 겪고 있습니다. 해결책이 간단하고 누군가가 나에게 지적 할 수 있기를 바라고 있습니다.특수 문자 및 악센트 부호가있는 문자

문자열 : La For? pour T?oin

주 악센트 문자 다음 누락 된 문자 - é 다음 êm 다음 t : La Forêt pour Témoin 가 변환됩니다.

:과 같은 일부 문자를 이스케이프하는 데 성공한 StringEscapeUtils를 사용해 보았습니다. 나는 또한 동일한 결과 (ă, ê가 작동하지 않음)를 생성하는 내 자신의 이스케이프 기능을 구축했습니다.

private String escapeChars(String string) { 
    char[] chars = string.toCharArray(); 
    String result = ""; 
    for (int i = 0; i < chars.length; i++) { 
     int c = chars[i]; 
     result += "&#" + c + ";"; 
    } 
    return result; 
} 

이 프로젝트는 앱 엔진 플러그인을 사용하여 이클립스에서 실행되고, 나는 문제가 자바, 앱 엔진, 또는 SQLite는에 의해 발생 여부를 좁힐 수 없습니다.

도움을 주시면 감사하겠습니다.

EDIT : 폼에서 요청 매개 변수를 표시 할 때 문자열이 잘못되었음을 발견했습니다. (즉, request.getParameter ("string")에 이미 형식이 잘못된 콘텐츠가 있음).

다니엘이 제안한 메타 태그를 사용해 보았는데 성공하지 못했습니다. 악센트 문자가 하드 코딩 JSP로 때 의도 한대로

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

이가 표시됩니다 : 당신이 비록 올바른 궤도에, HTML 문서의 헤더 데이터는 다음 생각합니다.

편집 : 또한 페이지 시작 부분에 <?xml version="1.0" encoding="UTF-8"?>을 추가했습니다.

나는 해결책에 매우 가깝다. 브라우저 양식에서 페이지의 인코딩을 변경하면 데이터가 서버로 올바르게 전달된다는 것을 발견했습니다. 브라우저에서 페이지 인코딩을 자동으로 검색하는 방법을 알아낼 수 없습니다. 해결

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

: 나는 브라우저에있는 자바 기본적으로 UTF-8 인코딩을 자동으로 감지하는 방법을 해결할 수 없었다. 그래서 나는 request.setCharacterEncoding ("ISO-8859-1")을 사용하여 ISO-8859-1 로의 문자 인코딩을 강제했다.

+1

이것은 문제를 해결할 수는 없지만 좋은 읽을 거리입니다. http://www.joelonsoftware.com/articles/Unicode.html –

+0

양식 제출 결과 요청 매개 변수가 올바르지 않으면 브라우저 악센트 부호가없는 문자를 나타낼 수없는 자동 감지 문자 세트를 사용하려고합니다. 다음을 추가하십시오 :''문서의 맨 처음에 공백이 오지 말고; 이들은 XHTML 문서의 맨 처음 문자 여야합니다. –

답변

6

편집 :

도 참조하십시오. (즉, request.getParameter ("string")에 이미 형식이 잘못된 콘텐츠가 있음). 그것은 GET 요청의 서버가 요청 URI를 구문 분석 UTF-8을 사용하도록 구성되지 않은

  1. :

세 가지 원인이있을 수 있습니다. 어떤 서버를 사용하고 있는지는 명확하지 않으므로 예제로 Tomcat을 대상으로 한 답변을 HTTP ConnectorURIEncoding 속성을 /conf/server.xml에서 UTF-8으로 설정하십시오.

  • POST 요청 인 경우 ServletContainer가 요청 본문을 인코딩하는 데 UTF-8을 사용하는지 확인해야합니다. 당신은 미리 request.setCharacterEncoding("UTF-8")으로 그것을 할 수 있습니다.

  • 매개 변수를 쓰는 콘솔은 UTF-8을 지원하지 않습니다. 어떤 콘솔에 대해 말하고 있는지 불분명합니다. 예를 들어 이클립스를 타겟으로 한 답변이 있습니다 : Window> Preferences> General> Workspace> Text File Encoding을 UTF-8로 설정하십시오.

  • 참조 :

    1

    그래, 첫 번째 문제는 데이터가 손실되는 곳을 찾아야한다는 것입니다.

    • SQLite에 쓸 수 있고 데이터를 올바르게 검색 할 수 있는지 알 수 있도록 이상적인 16 진수 유니 코드 문자를 추가하십시오.당신이 제대로
    • 돌아 오는 어디 당신이 텍스트 - 투 - 바이너리 변환이 있는지 확인 여부 볼 수 있도록
    • 하드 코드 일부 데이터, 당신은 적절한 인코딩을 지정 (예 : UTF-8)

    당신은 실제로 을 말하지 않았습니다. 일이 잘못 될 수 있습니다. 그러나 문자 인코딩을 정렬하면 나머지는 제자리에 있어야합니다. 아마 SQLite에 문제가 있지만 의심 스럽습니다. ...

    +0

    나는 클라이언트가 생성 한 헤더를 요청하기 위해 문제를 줄 였다고 생각한다. 위의 수정 사항을 참조하십시오. – klonq

    0

    문자열이 제대로 표시되었지만 en-us 현지화를 사용하여 이러한 문자를 인쇄하려고합니까?

    +0

    HTTP 응답 헤더가'Content-Language' 필드에 설정된 유효한 언어를 포함하는지 여부는 아무런 차이가 없습니다. 여기서 문제는 HTML 파일의 charset이 서버가 파일을 암호 해독 한 charset과 다르며 클라이언트가 파일을 해독하도록 지시한다는 것입니다. 이 경우 현지화는 아무런 차이가 없습니다. – ThePyroEagle

    1

    브라우저로 다시 보내지는 HTML에 charset이 있는지 확인해야합니다. 단지 비록

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    

    : 당신이 XHTML을 사용하는 경우,

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    

    또는 : 당신은 모두 head 태그의 첫 번째 자식 요소로, 다시 Content-Type: text/html; charset=UTF-8 포함 HTTP 응답 헤더로 전송해야 meta 태그를 사용하면 문제가 해결되는 경우가 많습니다.

    또한 W3C Markup Validation Service을 사용하여 HTML이 유효한지 확인하십시오. 내가 그 문자열을 발견 단순히 양식에서 요청 매개 변수를 표시 할 때 잘못된 있습니다 FAQ: Weird characters and question marks appear instead of accented characters

    +0

    메타 태그를 한 장 찍었습니다. 문제가 해결되지 않았습니다. 당신이 준 참고 문헌을 살펴볼 것입니다. – klonq