UTF-8 파일에서 BOM을 제거하고 나머지 xml 파일의 복사본을 만드는 방법에 대한 제안이 필요합니다.Java의 XML 파일에서 BOM을 제거하는 방법
답변
UTF-8 파일의 BOM으로 인해 도구가 손상되는 것은 내 경험에 공통적 인 부분이입니다. 왜 그렇게 많은 downvotes (하지만 그때 나에게 특별한 SO 배지를 이기기 위해 충분한 투표를 얻을 수있는 기회를 제공합니다;)
더 심각하게 : UTF - 8 BOM은 일반적으로 만들지 않습니다 그 정도의 의미는 이지만입니다. 사양에 따라 완전히 유효합니다 (권장하지는 않지만). 이제 문제는 많은 사람들이 BOM이 UTF-8에서 유효하다는 것을 인식하지 못해서 이러한 파일을 올바르게 처리하지 못하는 깨진 도구/API를 작성한다는 것입니다.
이제는 Java에서 파일을 처리하거나 Java를 사용하여 다른 (깨진) 도구에 필요한 파일을 프로그래밍 방식으로 작성/수정해야하는 등 두 가지 문제가 발생할 수 있습니다.
필자는 헬프 데스크가 Java에서 생성 한 완벽하게 유효한 UTF-8 파일을 엉망으로 만들 수있는 텍스트 편집기에 문제가있는 사용자로부터 메시지를 계속받을 수있는 한 번의 컨설팅에서이 사례를 보았습니다. 그래서 우리가 다루고있는 모든 단일 UTF-8 파일에서 BOM을 제거하여이 문제를 해결해야했습니다.
파일에서 BOM을 삭제하려면 새 파일을 만들고 처음 3 바이트를 건너 뛸 수 있습니다. 예를 들어 당신이 볼 수 있듯이
... $ file /tmp/src.txt
/tmp/src.txt: UTF-8 Unicode (with BOM) English text
... $ ls -l /tmp/src.txt
-rw-rw-r-- 1 tact tact 1733 2012-03-16 14:29 /tmp/src.txt
... $ hexdump -C /tmp/src.txt | head -n 1
00000000 ef bb bf 50 6f 6b 65 ...
는 파일이이 (완전 유효) UTF-8 BOM있다 "EF의 BB 탄 BF"로 시작합니다. 그것은 "원시"있다고
public static void workAroundbrokenToolsAndAPIs(File sourceFile, File destFile) throws IOException {
if(!destFile.exists()) {
destFile.createNewFile();
}
FileChannel source = null;
FileChannel destination = null;
try {
source = new FileInputStream(sourceFile).getChannel();
source.position(3);
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size() - 3);
}
finally {
if(source != null) {
source.close();
}
if(destination != null) {
destination.close();
}
}
}
참고 : 여기에
은 파일을 받아 처음 세 바이트를 건너 뛰는하여 복사본을 만드는 방법입니다 당신이 일반적으로 먼저 당신이이 있는지 확인 싶어 BOM을 호출하기 전에 또는 "나쁜 생각이 생길 수있다"[TM]. 당신은 단순히 투명하게 한 당신의 깨진 자바 API의 BOM을 제거 할 경우는 지금 ...을
... $ file /tmp/dst.txt
/tmp/dst.txt: UTF-8 Unicode English text
... $ ls -l /tmp/dst.txt
-rw-rw-r-- 1 tact tact 1730 2012-03-16 14:41 /tmp/dst.txt
... $ hexdump -C /tmp/dst.txt
00000000 50 6f 6b 65 ...
을 그리고 BOM은 사라 :
당신은 나중에 파일을 볼 수 있습니다 여기에 설명 된 pushbackInputStream 사용할 수 있습니다이 작동 why org.apache.xerces.parsers.SAXParser does not skip BOM in utf8 encoded xml?
private static InputStream checkForUtf8BOMAndDiscardIfAny(InputStream inputStream) throws IOException {
PushbackInputStream pushbackInputStream = new PushbackInputStream(new BufferedInputStream(inputStream), 3);
byte[] bom = new byte[3];
if (pushbackInputStream.read(bom) != -1) {
if (!(bom[0] == (byte) 0xEF && bom[1] == (byte) 0xBB && bom[2] == (byte) 0xBF)) {
pushbackInputStream.unread(bom);
}
}
return pushbackInputStream; }
참고하지만, defin된다 itely NOT 작업 체인의 다른 도구가 BOM이있는 UTF-8 파일과 올바르게 작동하지 않을 수있는보다 심각한 문제를 수정했습니다.
투표 수 질문의 * 주제 *에 대한 판단이 아니며, 질문의 품질 *에 대한 판단입니다. 투표 버튼에 대한 툴팁을보십시오. – skaffman
@skaffman : 괜찮아요.하지만 downvoting 대신에 OP가 UTF-8 파일을 사용하고 있는지 물어 보았습니다. (나는이 문제에 대해 의심 스러웠습니다.) 그리고 질문에 추가했습니다. (그리고 태그를 편집했습니다.) 나는 다른 말을 할 수 있을지 모르겠다. * "파일에서 BOM을 제거하는 방법"*은 아주 자명하다. "UTF-8"을 추가했습니다. 물론 나는 단순히 downvote하는 것이 더 쉬웠을 것이다.) – TacticalCoder
@TacticalCoder는 ur 제안을 많이 주셔서 감사합니다. 나는 이것이 내가 가진 pblm을 해결할 것이라고 확신한다. – hari
- 1. XML 파일에서 공백을 제거하는 방법
- 2. XML 파일에서 헤더를 제거하는 간단한 방법
- 3. xml 파일에서 spl 문자를 바꾸거나 제거하는 방법
- 4. 파일에서 xml 요소를 제거하는 방법은 무엇입니까? 같은 XML 파일에서
- 5. 파일에서 rownames을 제거하는 방법
- 6. Java의 XML 파일에서 텍스트 값을 구문 분석
- 7. XML 파일에서 zip 압축을 제거하는 방법은 무엇입니까?
- 8. C# XML 파일에서 서명을 제거하는 방법은 무엇입니까?
- 9. XML 파일에서 중복 요소를 제거하는 방법은 무엇입니까?
- 10. C#을 사용하여 XML 파일에서 모든 빈 요소를 제거하는 방법?
- 11. java를 사용하여 XML 파일에서 &을 제거하는 방법?
- 12. sed 또는 Perl을 사용하여 XML 파일에서 잘못된 문자를 제거하는 방법
- 13. XML 파일에서 보이지 않는 정크 문자를 제거하는 방법
- 14. 파일에서 주어진 줄을 제거하는 방법
- 15. xml 파일에서 AnimationDrawable을로드하는 방법
- 16. Java의 PFX 파일에서 공개 키를 읽는 방법
- 17. Java의 텍스트 파일에서 ArrayList를 읽는 방법?
- 18. XML 파일에서 데이터를 읽는 방법
- 19. XML 파일에서 정보를 추출하는 방법
- 20. xml 파일에서 이미지를 읽는 방법?
- 21. xml 파일에서 항목을 삭제하는 방법
- 22. XML 파일에서 데이터를 추출하는 방법
- 23. 패치 파일에서 C 주석을 제거하는 방법
- 24. C의 데이터 파일에서 열을 제거하는 방법
- 25. perl을 사용하여 입력 파일에서 열을 제거하는 방법
- 26. windows 명령 줄 : 파일에서 공간을 제거하는 방법
- 27. 자바 파일에서 SVN 히스토리를 제거하는 방법?
- 28. xib 파일에서 선택한 요소를 제거하는 방법
- 29. MySQL 백업 파일에서 빈 테이블을 제거하는 방법
- 30. 자바에서 zip 파일에서 바이트를 제거하는 방법?
downvotes 때문에 중복으로하지 않습니다, 그들은이 질문은 너무 광범위하고 있기 때문에 :
그리고 여기뿐만 아니라 다른 인코딩을 포함, 더 완전한 답변과 질문에 대한 링크입니다 사실 - stackoverflow 특정, 지역화 된 프로그래밍 문제를 돕기위한 것입니다. 우리는 프로그램을 디버그하도록 도울 수 있습니다. 우리는 프로그램을 작성하지 않을 것입니다. –
응답하기 전에 -5가되기를 기다리고 있습니다.) – TacticalCoder
@ 하리 : 파일의 인코딩은 무엇입니까? UTF-8? – TacticalCoder