BOM 마커로 UTF-8 읽기: 예기치 않은 BOM 출력 이해
바이트 순서로 UTF-8로 인코딩된 파일을 읽을 때 Mark(BOM), 출력 문자열에 BOM이 포함되는 것을 볼 수 있습니다. 이는 유니코드 식별자인 BOM이 파일 시작 부분에 특정 바이트 시퀀스로 저장되어 있기 때문에 발생합니다.
주어진 Java 코드에서는 UTF-8 파일 읽기를 처리하기 위해 FileReader 및 BufferedReader가 적절하게 활용됩니다. . 그러나 다음 줄에서 문제가 발생합니다.
text = new String(tmp.getBytes(), "UTF-8");
이 줄은 UTF-8 문자 집합을 사용하여 tmp 문자열에 저장된 바이트를 디코딩하려고 시도합니다. 그러나 String의 getBytes() 메서드는 원본 파일의 BOM 마커를 유지하지 않습니다. 결과적으로 디코딩 프로세스는 BOM을 무시하고 사실상 손실됩니다.
출력 문자열에서 BOM 표시를 유지하려면 코드를 약간 조정해야 합니다.
byte[] bytes = tmp.getBytes("UTF-8"); if (isUTF8WithBOM(bytes)) { text = new String(bytes, 3, bytes.length - 3); } else { text = new String(bytes, "UTF-8"); }
isUTF8WithBOM 메소드는 바이트 배열이 UTF-8 BOM 시퀀스(0xEF, 0xBB, 0xBF)로 시작하는지 확인합니다. true인 경우 세 번째 바이트부터 시작하도록 바이트 배열을 분할하여 BOM이 제거됩니다. 이렇게 하면 후속 디코딩 프로세스의 출력 문자열에 BOM 마커가 포함됩니다.
위 내용은 Java에서 UTF-8 파일을 읽을 때 BOM을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!