IT/java|Spring

[java] 유니코드 대체문자(��) 자바 검증 처리 방법 (마름모 안의 물음표)

snapcoder 2024. 9. 12. 22:05
728x90
반응형
SMALL

[java] 유니코드 대체문자(��) 검증 및 처리 방법 (마름모 안의 물음표)

 

 

 

문제 상황

 

Confluence의 첨부파일 API를 호출해서 다운로드 로직 구현하고나서

Tika 라이브러리의 parseToString 메소드로

 

여러가지 확장자 파일의 텍스트를 추출하는 과정에서

일부 암호화된 파일을 파라미터로 넘겨줄 경우

쓰레기값 대체문자들이 리턴되어 예외처리 분기가 필요했다.

 

대체문자. 바로 채득해보자.

 

 

 

 

 

대체문자(代替文字,replacement character)란?

 - 오류가 발생하거나 잘못되어 있다는 사실을 표시하기 위하여 사용되는 제어 문자입니다.

 

 - 컴퓨터가 이해할 수 없거나, 유니코드에서 지원되지 않는 문자가 들어온 경우 대신 표현하는 유니코드(unicod)의 특수블록(special block) 문자입니다.

 

 

 

 

 

 

 

 

대체문자의 종류 및 심층분석

 - 문자를 표현할 수 없는 경우 물음표(?, U+003F)등으로 이를 대신 나타내기도 합니다.

 

 - UTF-8 인코딩에서 이 문자가 2개 붙어 있는 경우(��), EUC-KR 인코딩으로 해석하면 占쏙옙 글자 등으로 대체되는 글자 깨짐현상을 보입니다.

 - 기본적으로 검은색 마름모 안에 하얀색 물음표가 있는 모양 (◆+?) 으로 표시되지만, 글꼴이나 프로그램에 따라서는 아무것도 표시되지 않거나( ) 사각형 모양(□)으로 표시되기도 합니다.

=> 문자열 처리시 쓰레기값 대체문자가 여러가지 형태로 나타날 수 있다.

 

 

 

 

 

 

자바로 검증 및 처리 방법

생각보다 매우 간단했다.

 

유니코드 대체 문자는 U+FFFD 이기 때문에

해당 값이 str에 존재하면 인덱스값 0 이상을 반환할 것 이다.

public static boolean isUsableText(String str){
    if(str.toLowerCase().startsWith("skip to content".toLowerCase())    // Confluence에서 첨부파일을 찾을 수 없는 경우
        || str.indexOf('\uFFFD') >= 0   // 문자열에 U+FFFD가 포함되어 있는 경우
    ){
        return false;
    }
    return true;
}

 

 

 

 

 

 

참고 링크

https://ko.wikipedia.org/wiki/%EB%8C%80%EC%B2%B4_%EB%AC%B8%EC%9E%90

 

대체 문자 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

 

728x90
반응형
LIST