이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 14853|회답: 0

[출처] 자바에서 유니코드 파일(UTF-8 등)을 읽을 때 발생하는 BOM 접두사 문제

[링크 복사]
게시됨 2019. 1. 14. 오후 4:26:17 | | |
자바에서 유니코드 파일(UTF-8 등)을 읽을 때 BOM 첫 문자 문제와 이를 다루는 방법

Windows에서 텍스트 편집기로 생성된 텍스트 파일은 UTF-8과 같은 유니코드 형식으로 저장할 경우 파일 헤더에 BOM ID(첫 문자)가 추가됩니다.

이 식별은 Java에서 파일을 읽을 때 제거되지 않으며, String.trim()도 제거할 수 없습니다. readLine()을 사용해 첫 줄을 읽고 문자열에 저장하면, 문자열의 길이가 보이는 것보다 1 더 커지고, 첫 번째 문자가 이 BOM입니다.

이로 인해 문제가 발생할 수 있는데, 예를 들어 ini 파일을 읽을 때 첫 줄이 "["로 시작하는지 판단하지 못할 때가 있습니다.

다행히도 Java가 유니코드 파일을 읽으면 BOM을 일관되게 "\uFEFF"로 변경하므로, 수동으로 풀 수 있습니다(판단 후에는 substring()이나 replace()를 사용해 이 BOM을 제거할 수 있습니다:

하지만,이 접근법이 완벽하지는 않습니다생성된 jar 파일이 Windows에서 실행된다면 여전히 문제가 있습니다. 궁극적인 우회 방법은 apache commons io에서 제공하는 BOMInputStream을 사용하는 것입니다:

BOM이란 무엇인가요?


BOM = 바이트 순서 표시
BOM은 유니코드 명세에서 바이트 순서를 표시하는 권장 방법입니다. 예를 들어, UTF-16의 경우, 수신자가 FEFF의 BOM을 받으면 바이트 스트림이 빅엔디언임을 나타냅니다; FFFE가 수신되면 바이트스트림이 리틀-엔디언임을 나타냅니다.
UTF-8은 바이트 순서를 표시하기 위해 BOM을 요구하지 않지만, "I are be UTF-8 encoded"를 나타내는 데 사용할 수 있습니다. BOM의 UTF-8 인코딩은 EF BB BF입니다(UltraEdit로 텍스트를 열고 16진수로 전환하면 확인할 수 있습니다). 수신기가 EF BB BF로 시작하는 바이트 스트림을 받으면 UTF-8 인코딩임을 알 수 있습니다.





이전의:잭슨 공통 오차 해법
다음:바 코딩 소프트웨어 바텐더!
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com