MS Excel csv 한글깨짐
증상
특정 편집기로는 CSV 파일을 열어볼 때는 글자 깨짐 현상 없음
MS Excel 편집기로 CSV 파일을 열어볼 때는 글자 깨짐 현상 발생
원인
MS Excel 에 파일의 인코딩을 알리는 BOM
누락 (매직넘버라고 부른다.)
아래는 위키피디아의 문서의 내용을 발췌
마이크로소프트의 컴파일러와 인터프리터 그리고 노트패드와 같은 마이크로소프트 윈도우의 많은 소프트웨어들은 BOM을 휴리스틱을 이용하지 않고 필수적인 매직 넘버처럼 처리합니다. 이 도구들은 UTF-8로 텍스트를 저장할 때 BOM을 추가하며, BOM이 나타나지 않거나 파일에 ASCII만 포함되어 있지 않다면 UTF-8을 해석할 수 없습니다. 또한 구글 독스는 문서를 다운로드를 위한 플레인 텍스트로 변환할 때 BOM을 추가합니다.
해결
UTF8
BOM
[-17, -69, -65] 추가
예제코드
class Example {
public static void main(String[] args) throws IOException {
var noBomCsv = new File("ms-excel-no-bom-example.csv");
var bomCsv = new File("ms-excel-bom-example.csv");
try (var noBomCsvWriter = new FileOutputStream(noBomCsv);
var bomCsvWriter = new FileOutputStream(bomCsv)) {
var csvString = "이름,나이,성별\n"
+ "박제희,29,남\n"
+ "홍길동,30,남";
noBomCsvWriter.write(csvString.getBytes());
apply_MS_UTF8_Encoding_BOM(bomCsvWriter);
bomCsvWriter.write(csvString.getBytes());
}
}
private static void apply_MS_UTF8_Encoding_BOM(FileOutputStream bomCsvWriter) throws IOException {
bomCsvWriter.write(new byte[]{-17, -69, -65});
}
}
댓글남기기