2011-03-25 6 views
0

서블릿의 비 커닝 시스템에서 쿼리 매개 변수를 수집 할 때 타사 사이트에서 들어오는 모든 입력을 로그 파일에 저장할 수있는 유효한 UTF-8 문자열로 올바르게 변환하고 있는지 확인하는 가장 좋은 방법은 무엇입니까?Java에서 UTF-8 문자열을 얻는 가장 좋은 방법은 무엇입니까?

+0

이 자습서는 꽤 좋습니다. http://download.oracle.com/javase/tutorial/i18n/text/string.html – CoolBeans

답변

4

Java 문자열은 내부적으로 항상 UTF-16입니다. 실제로 인코딩에주의를 기울여야하는 곳은 바이트를 문자열로 또는 그 반대로 변환하는 것입니다. 인코딩이 바이트/문자 간 변환을위한 규칙 세트이기 때문입니다. 문자열의 속성이 아닙니다. 귀하의 경우, 변환은 정확히 두 번 발생해야합니다 : 타사 사이트를 읽을 때 및 로그 파일에 쓸 때.

제 3 자 사이트에서 읽을 때 이 아닌은 UTF-8 만 사용하면 모든 사이트에서 다양한 인코딩을 사용할 수 있습니다. 따라서 HTTP 헤더, HTML 메타 태그 또는 XML 헤더에서 선언 한 인코딩을 준수해야합니다. 괜찮은 HTTP 클라이언트라면 그렇게 할 것입니다. 그래서 그 일을하게하고 단지 아무 것도하지 않으려 고합니다.

로그 파일에 글을 쓸 때 플랫폼 기본 인코딩이 아닌 UTF-8을 사용해야합니다 (UTF-8 인 경우에도 변경 될 수 있음). 이 작업은 로깅 라이브러리의 구성에서 수행하거나 OutputStreamWriter을 작성할 때 그러한 라이브러리없이 파일을 작성하는 경우 수행해야합니다.

0

String(byte[] bytes, Charset charset) 생성자를 사용하면 인코딩 문자 집합을 지정할 수 있습니다.

1

1 단계 : 양식이 포함 된 페이지 자체가 UTF-8인지 확인하십시오.

2 단계 : 들어오는 요청의 헤더를 확인하여 문자 세트를 제공하는지 확인하십시오.

3 단계 : String(byte[]) 또는 InputStreamReader(InputStream)에 의존하지 마십시오. 명시 적 문자 집합 사양을 사용하는 함수를 항상 호출하십시오.

관련 문제