특정 데이터를 csv 형식으로 다운로드 할 수 있는 api를 개발하는 과정에 한글이 깨지는 현상을 고치는 내용입니다.
간단하게 utf-8을 추가해주면 될 것으로 생각했으나... 예상치 못한 방법으로 해결을 했습니다.
참고한 사이트
CSV 파일 만들 때 엑셀에서 한글 깨짐 현상 해결하기 - 제로초
https://smorning.tistory.com/269
https://velog.io/@kim_sunnnny/what-is-applicationoctet-stream
예상대로라면 아래 한 라인으로 해결 될 것으로 생각했습니다.
res.setHeader('Content-Type', 'text/csv; charset=utf-8-sig') // or charset=utf-8
하지만 csv에서만큼은 여전히 한글 깨짐현상이 있었습니다.
csv string 앞에 \ufeff
of \uFEFF
등을 붙이기도 했지만 여젼했습니다.
답답한 마음에 이미지 파일 다운로드에 사용하던 header setting 문구application/octet-stream
를 사용했더니 한글 깨짐현상이 사라졌습니다.
물론 \uFEFF
도 추가한 상태여야 합니다.
@Get('/download/files')
async downloadFile(
@Res() res
) {
...(중략)
const csvStringifier = createObjectCsvStringifier(dataHeader)
const csvContent = '\uFEFF' + csvStringifier.getHeaderString() + csvStringifier.stringifyRecords(fileData)
// 적용이 안됨
// res.setHeader('Content-Type', 'text/csv; charset=utf-8-sig') // or charset=utf-8
res.setHeader('Content-Type', 'application/octet-stream')
res.setHeader('Content-Disposition', 'attachment; filename="data.csv"')
res.send(csvContent)
}
댓글 남기려고 회원가입 했습니다
큰 도움이 되었습니다. 아량 넓은 지식 공유에 진심으로 감사드립니다.