2012-03-26 3 views
2

Java 버그 데이터베이스 페이지 http://bugs.sun.com/view_bug.do?bug_id=4508058에서 Sun/Oracle은 UTF-8 인코딩 문자열의 BOM을 구문 분석하지 않는 Java 문제를 수정하지 않는다고 읽습니다. 이 페이지에 대한 가장 최근의 의견은 2010 년으로 거슬러 올라간다. 나는 그것에 관한 더 어린 정보가 있는지 알고 싶다. Java가 UTF-8의 BOM을 처리 할 수 ​​없다는 것은 여전히 ​​사실입니까?Java : UTF-8 및 BOM

+1

문제를 어떻게 설명했는지에 대해서는 동의하지만 예 : UTF-8 용 자바 인코더 및 디코더는 불필요한 BOM을 허용하지 않습니다. UTF-8의 BOM은 정말 나쁜 소식이며 모든 종류의 것들을 망가 뜨립니다. 절대로 사용하지 마십시오. 파일 인코딩을 지정해야하는 경우 MIME 헤더, 임베디드 선언 또는 주석과 같은 상위 프로토콜을 프로그래밍 언어로 사용하거나 관례 파일 확장명 ".utf8"을 사용하십시오. – tchrist

+2

나는 당신에 동의합니다. 그러나 사용자가 Excel에서 직접 열 수있는 UTF-8 CSV 파일을 만들려면 BOM을 사용할 방법이 없습니다. BOM을 사용하지 않으면 ANSI 파일로 읽습니다. (마이크로 소프트는 그들의 BOM이 전세계에 드는 모든 개발 시간 동안 소송을 제기해야한다.) – dstibbe

답변

3

예, 자바가 BOM을 UTF8로 인코딩 된 파일로 처리 할 수 ​​없다는 것은 여전히 ​​사실입니다. 데이터 형식을 목적으로 여러 XML 파일을 구문 분석 할 때이 문제를 보았습니다. 언제 당신이 그들을 만날 수 있는지 알 수 없기 때문에 런타임에 찾거나 tchrist가 준 조언을 따르면 BOM 마커를 제거 할 것을 제안합니다.

+0

당신이 그렇게하는 방법을 놓치고 있다면 : 빠른 방법은'if (text.codePointAt (0) == 0xfeff) text = text.substring (1, text.length());'(이것은 UTF-8 BOM'EF BB BF'를 잡아낼 것입니다). 보다 정교한 접근법은 http://stackoverflow.com/questions/1835430/byte-order-mark-screws-up-file-reading-in-java/1835529#1835529에 설명되어 있습니다. – user149408