2014-06-10 12 views
4

€ŠšŽžŒœŸ과 같은 특수 문자가 포함 된 필드가 포함 된 양식을 제출하려고합니다. 지금까지 내가 ISO-8859-15 wikipedia page에서 볼 수있는 한, 이러한 문자는 표준에 포함되어 있습니다. 요청과 응답 모두에 대한 인코딩이 ISO-8859-15로 설정되어 있지만 JAVA EE 환경에서 FreeMarker 2.3.18을 사용하여 값을 표시하려고 할 때 값은 ???????입니다. 양식의 허용 된 문자 집합을 ISO-8859-15으로 설정했는데 양식이 콘텐츠 유형 text/html;charset=ISO-8859-15 (방화 광부 사용)과 함께 제출되었음을 확인했지만 올바른 문자를 표시하는 방법을 알 수 없습니다. 다음 코드를 실행하면 올바른 16 진수 값이 (ex: Ÿ = be)으로 표시됩니다.FreeMarker 특수 문자가 물음표로 표시됩니다.

무엇이 누락 되었습니까? 미리 감사드립니다.

System.out.println(Integer.toHexString(myString.charAt(i))); 

편집 :

내가 요청 처리로 나는 다음과 같은 코드를 데 :

PrintStream ps = new PrintStream(System.out, true, "ISO-8859-15"); 
String firstName = request.getParameter("firstName"); 

// check for null before 
for (int i = 0; i < firstName.length(); i++) { 
    ps.println(firstName.charAt(i)); // prints "?" 
} 

BufferedWriter file=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), "ISO-8859-15")); 
file.write(firstName); // writes "?" to file (checked with notepad++, correct encoding set) 
file.close(); 
+0

freemarker/spring/tomcat 환경이 있습니다. 광산은 물음표를 표시하고 네트워크를 통해 물음표로 보내지 만, FM은 먼저 StringWriter로 출력하도록 설정되어 있습니다.이 시점에서 원래 문자는 여전히 Ÿ로되어 있기 때문에 FM 이후 문제가 발생합니다 출력을 처리했습니다. – Goose

답변

2

는 16 진수 값에 따르면, 폼 데이터가 제대로 제출합니다. 문제는 출력과 관련이있는 것으로 보입니다. Java는 사용중인 charset으로 표현할 수없는 경우 문자를 ?으로 바꿉니다.

출력 스트림을 생성 할 때 올바른 charset을 사용해야합니다. 어떤 명령을 사용합니까? 나는 프리 마커 모르지만 아마이 뭔가이 닮은로 대체해야

Writer out = new OutputStreamWriter(System.out); 

같은있을 것입니다 : 그런데

Writer out = new OutputStreamWriter(System.out, "iso-8859-15"); 

을, UTF-8은 일반적으로 인코딩을위한 더 나은 선택이다 charset.

+0

작은 프로젝트에서 이것을 사용해 보았는데 효과가있었습니다. 인코딩이 지정되지 않았습니다. 고맙습니다! – Alex

관련 문제