2009-12-02 5 views
0

Java에서는 Character.toString((char) 65533)이 다음 기호를 인쇄하는 이유는 무엇입니까? ?Java에서 유니 코드 대체 문자 인쇄 금지

나는 모든 곳에서 이러한 문자를 인쇄하는 Java 프로그램을 가지고 있습니다. 그것의 큰 프로그램. 이 문제를 피하기 위해 내가 할 수있는 것에 대한 아이디어가 있습니까?

+0

그들은 처음부터 왔습니까? 왜 그들이 인쇄중인 문자열에 있습니까? 이 점을 분명히하십시오. – uckelman

+0

그들이 오는 곳은 RSS 피드입니다. 등 다양한 웹 서비스가 있습니다. – akula1001

답변

8

가장 가능성있는 시나리오 중 하나는 UTF-8 문자 집합을 사용하여 ISO-8859 데이터를 읽는 중입니다. 유효한 UTF-8이 아닌 일련의 문자가있는 경우 기호로 바뀝니다.

입력 스트림을 확인하고 올바른 문자 세트를 사용하여 읽었는지 확인하십시오.

3

유니 코드 문자 U + FFFD가 없습니다. 따라서 코드는 논리적으로 올바르지 않습니다. Unicode Replacement Symbol의 의도 된 사용은 잘못된 입력 (예 : (char)65533)으로 대체됩니다.

문제를 해결하는 방법 : 문자열에 정크를 넣지 마십시오. 문자열은 텍스트 용입니다. 바이트는 임의의 2 진 데이터 용입니다.

+0

이 말은 ... http://www.fileformat.info/info/unicode/char/fffd/index.htm – akula1001

+1

"잘못된 입력 문자"자체를 나타내는 값이 유효한 문자인지 여부를 주장 할 수 있습니다 . 문자가 아니고 숫자가 아니며 구두점이 아니며 수학 기호가 아닙니다. – MSalters

+0

"특수 문자"입니다. 그러나 심지어 폰트 표현을 가지고 있기 때문에, 대용으로 사용 되더라도 확실히 그것을 문자라고 부릅니다. 사용되지 않는 코드 포인트가 많이 있습니다. 더 이상 혼동하지 마십시오. –

1

글쎄, 당신은 무엇을합니까 할까요? 이러한 문자가 "모든 곳"에 있다면 나쁜 데이터가있는 것 같습니다 ... 유니 코드로 표현할 수없는 데이터를 수신하는 것은 매우 드뭅니다.

어떻게 데이터를 시작 하시겠습니까?

+0

음,이 데이터를 얻는 곳은 RSS 피드입니다. – akula1001

+1

잘못된 인코딩을 사용하고있는 것 같습니다. –

8

Java에서 Character.toString ((char) 65533)이이 기호를 인쇄하는 이유는 무엇입니까? ?

정확한 특정 캐릭터가 특정 codepoint와 연관된 때문이다. 이 아닐 경우은 생각하는 것처럼 임의의 문자를 표시합니다.

나는 모든 곳에서 이러한 문자를 인쇄하는 자바 프로그램이 있습니다. 그것의 큰 프로그램. 이 문제를 피하기 위해 내가 할 수있는 것에 대한 아이디어가 있습니까?

문제가 다른 곳에 있습니다. 최소한 마다을 설정해야합니다.이 경우 byte - char 개의 변환 (파일/db에 텍스트 저장, 파일/db에서 텍스트 읽기, 텍스트 조작, 텍스트 전송, 텍스트 표시 등)을 사용하여 UTF-8을 사용합니다. 내 눈을 잡는다

는 자바 0xFFFD 절대적으로 특별한 아무것도하지 않는 사실이다, 그냥 물음표 ?에 의해 밝혀 문자를 대체하고 0xFFFD 자바에서 온다 주장을 계속하면서 그. 나는 파이어 폭스가 정확히 당신이 말한 것을 알고있다. 그래서 당신은 아마도 "파이어 폭스"와 "자바"를 혼동하고 있는가?

이것이 사실이고 실제로 자바 웹 응용 프로그램에 대해 이야기하는 경우 적어도 HTTP 응답 인코딩을 UTF-8으로 설정해야합니다. 문제의 JSP 페이지 위에 <%@ page pageEncoding="UTF-8" %>을 놓음으로써이를 수행 할 수 있습니다. this article을 사용하면이 "유니 코드 문제"를 해결하는 데 필요한 모든 배경과 솔루션에 대한 자세한 배경 정보와 자세한 개요를 얻을 수 있습니다.