2011-08-05 3 views
0

사용자는 국제 lang 문자를 포함하여 원하는 모든 것을 쓸 수있는 입력 필드가 하나 있습니다.한 서블릿에서 다른 서블릿으로 intr 문자를 전송하는 데 문제가 있습니다.

첫 번째 서블릿은 다음과 같습니다.

protected void doWork(HttpServletRequest request, HttpServletResponse response) throws ServletException, 
     IOException { 
response.setContentType("text/html; charset=UTF-8"); 
PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF8"), true); 
out.println("<HTML><HEAD><TITLE>"); 
... 
out.println("<input type=text name=someText style='width:10em;'>"); 

서블릿은 다음 키 라인을 가진 두 번째 서블릿으로 제출 버튼을 진행합니다.

if(httpRequest.getCharacterEncoding() == null) 
      httpRequest.setCharacterEncoding("UTF-8"); 
String someText= httpRequest.getParameter("someText"); 

내가 뭔가 이상한 얻을 같은 : AAA ° iÃüÃöÃçIÄ ± 내가 디버그를 진행합니다.

내가 뭘 잘못하고 있니? 도움을

덕분에, 직접

httpRequest.setCharacterEncoding("UTF-8"); 

널 (null)을 확인 할 필요없이 UTF에

+0

당신의'PrintWriter' 접근법은 어색합니다. 그냥 response.setCharacterEncoding ("UTF-8")'*을하기 전에'response.getWriter()'를 얻는다. 'InputStreamReader'에서 랩핑 할 필요가 없습니다. 게다가 서블릿에서 HTML을 내보내는 것은 매우 좋지 않습니다. JSP로 수행되어야합니다. http://stackoverflow.com/tags/servlets/info 및 http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html을 참조하십시오. – BalusC

답변

1

설정 문자 코딩, 그것은 null이 될하지 않습니다. Container/Appserver는 기본 ISO-8859-1로 설정합니다. 이렇게하면 문제가 해결됩니다.

+0

당신은 utf-8을 제대로 설정하지 않았지만 그 코드 줄을 두 번째 서블릿에서 doWork로 옮겨야했습니다. 나는 인코딩을 설정하는 데 사용하고 utf-8을 사용하여 비슷한 방법으로 처리합니다. 무엇이든하기 전에 설정해야 할 것을 설정하면 내 문제가 해결됩니다. 감사합니다. btw MTilsted 제안에 감사드립니다. 서블릿이 그걸 사지 않았습니다. :) – mechanicum

+0

5 시간 후에 무슨 메시지가 올지 알 수 없으므로 로그인하지 않았습니다. – mechanicum

-1
당신은 양식에 동의-캐릭터 세트 = 'UTF-8'을 추가해야 할 수 있습니다

: (뭔가 같은 :

<form accept-charset='UTF-8' ... > 

중요 참고 : 당신은 동의-캐릭터 세트를 사용한다 = 'UTF-8' 페이지를 uft-8로 보내면 폼의 인코딩을 페이지와 다른 것으로 변경하려고하지 마십시오. (일부 브라우저에서는 html 표준이 엉뚱한 곳에서 사용하기 때문에 필요합니다. 양식을 제출하는 데 사용되는 지정된 인코딩).

관련없는 참고 사항 : 서블릿에서 html 출력을 생성하려면 out.println을 사용하지 마십시오. wh를 유지 관리 할 수 ​​없습니다. 당신은 코드와 HTML을 혼합합니다. Velocity와 같은 도구를 사용하여 html과 java를 분리하십시오.

http://velocity.apache.org - 1 시간 이내에 실행할 수 있어야합니다.)

+0

정상적인 브라우저에서는 작동하지 않습니다. MSIE에서만 작동하며 심지어 위험하더라도 MSIE에서 작동합니다. '

'을 사용하지 마십시오. – BalusC

+0

그러나 MSIE의 버그가있는 버전 만 필요합니다. 다른 모든 브라우저는 페이지와 동일한 인코딩으로 회신을 보내야한다는 것을 알고 있습니다. 그래서 내가 추가하자 : 당신이 UTF-8로 페이지를 제공한다면 그 accept-charset 만 사용하라. 최근에는 인코딩을 페이지와 다른 것으로 변경하려고 시도합니다. – MTilsted

+0

그리고 일부 버전의 Firefox도 필요합니다. "중요 참고 사항"절에 명시된대로 사용하는 것이 안전해야합니다. – MTilsted

관련 문제