2009-05-14 4 views
3

입력 양식을 빈 설정자 에 매핑하는 JSF에 의해 생성 된 HTML 양식이 있는데 JSF가 입력 할 때 유니 코드 입력이 왜곡되는 것처럼 보입니다. 특히 setter에서 테스트 목적으로 다음 예외를 넣습니다.JSF 및 HTML 양식의 유니 코드 문제?

public void setTitle(String title){ 
    System.out.println("title set with: "+title+"\n"); 
    if (title.startsWith("xxx")) { 
     throw new RuntimeException("debug exception "+title); 
    } 
    this.title = title; 
} 

다음 제목 입력 요소에 "xxxx 海 陆"양식을 입력하십시오. 그런 다음 양식을 제출하면 로그 인쇄가 표시됩니다.

title set with: xxxx ????? 

(유니 코드 호환 mac 터미널에서). 무엇이 잘못되었는지에

Error setting property 'title' in bean of type 
uk.ac.lancs.e_science.sakaiproject.api.blogger.post.Post: 
java.lang.RuntimeException: debug exception xxxx ���?? 

모든 단서 : 는 그리고 응답 HTML 페이지에 오류 메시지가? 나는 그것으로 가득 차 있고 틀린 진단이 있는가? 다른 모든 가능성을 없앴습니다. 유니 코드는 동일한 응용 프로그램의 다른 구성 요소에서 제대로 작동하는 것 같습니다.

답변

3

질문 나는 요구 될 것이다 :

  • 어떻게 양식을 요청 (응용 프로그램/x-www-form-urlencoded를 또는 다중/폼 데이터)를 인코딩한다? 멀티 파트 데이터는 타사 MIME 파서를 사용하여 디코딩되므로 문제가있을 수 있습니다. 데이터가 URL 인코딩 된 경우 올바르게 이스케이프 처리됩니까?
  • 브라우저는 어떤 문자 집합입니까 accepting?
  • 무엇 encoding is the server detecting? 유니 코드 문자 세트입니까?
  • lossy encoding (예 : MacRoman)으로 쓰는 로깅입니까? 무슨 default charset 서버를 사용하고 있습니까?
  • 당신이 콘솔에 표시하는 문자열에 무엇이 필요하지 않기 때문에

,이 코드를 사용하여 Unicode code points를 덤프 할 수 있습니다

public static void printCodepoints(char[] s) { 
    for (int i = 0; i < s.length; i++) { 
     int codePoint = Character.isHighSurrogate(s[i]) ? Character 
      .toCodePoint(s[i], s[++i]) 
      : s[i]; 
     System.out.println(Integer.toHexString(codePoint)); 
    } 
    } 
+0

멀티 파트 형식입니다. 어쩌면 URL 인코딩으로 전환 해 보겠습니다. 고마워. –

+0

안녕하세요! 이것은 작동하는 것처럼 보입니다! 표준 포스트 인코딩으로 변경하면됩니다. 감사합니다 –

+1

나는 축하하기 위해 그렇게 빨리되지 않을 것입니다. _overcome_ 문자 버그에 사용되는 multipart/form-data를 보았습니다. 양식 파일 업로드를 원한다면 필요합니다. 아직도, 적어도 당신은 문제가 어디에 놓여 있는지에 대한 생각을 가지고 있습니다. – McDowell

0

브라우저가 유선을 통해 유니 코드를 보낼 수 없습니다. 그것은 어떤 식 으로든 유니 코드를 인코딩해야합니다. 예외의 출력 (두 개의 한자가 다섯 자로 바뀜)에서 데이터가 UTF-8로 인코딩되었고 문자열 title이 구성 요소의 서버 측 수신 후 올바르게 디코드되지 않았다고 추측합니다.

양식에 accept-charset 특성을 설정하는 것이 좋습니다. 그것은 모든 사람에게 행동을 지시해야합니다.

+0

귀하의 생각이 너무 내 생각이다. utf-8을 사용해야합니다 (내 교육용 응용 프로그램에는 동일한 입력 요소에 중국어와 산스크리트어가 포함될 수 있음). 클라이언트 측 폼에서 accept-charset을 설정하면 서버 측 구성 요소가 utf-8을 올바르게 디코딩하게됩니다. 어떻게 작동합니까? 어쨌든 구문은 정확히 무엇입니까? 나는 그것에게 시도를 줄 것이다 ... –

+0

폼 포스트/get은 실제로 HTML 요청이다. accept-charset을 사용하면 서버가 예상하는 charset을 브라우저에 알릴 수 있습니다. 브라우저는이 정보를 요청의 헤더 필드에 넣어 프레임 워크에서 볼 수 있습니다. 그렇게하면 관련된 모든 사람들이 무엇을해야할지 힌트를 얻게됩니다. –