# 내보낸 CSV 파일에 깨진 문자가 표시됩니다

**URL:** https://meta.discourse.org/t/exported-csv-files-have-garbled-characters/277293
**Category:** UX
**Created:** [8월 31, 2023, 5:30오전 UTC](https://meta.discourse.org/t/exported-csv-files-have-garbled-characters/277293 "2023-08-31T05:30:09Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![Ellery](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ellery/32/315016_2.png) [@Ellery](https://meta.discourse.org/u/Ellery)
#### Post date: [8월 31, 2023, 5:30오전 UTC](https://meta.discourse.org/t/exported-csv-files-have-garbled-characters/277293/1 "2023-08-31T05:30:09Z")

</div>

사용자 목록을 CSV 형식으로 내보낼 때, `name` 필드에 ASCII 문자와 숫자 이외의 문자가 포함되어 있으면 문자가 깨져 보입니다:  
 ![image](https://sea3.discourse-cdn.com/meta/images/transparent.png)

이 문제를 해결하기 위한 두 가지 방법을 찾았습니다:

1. Excel에서 새로운 XLSX 파일을 생성한 후, “텍스트/CSV에서” 옵션을 사용하여 데이터를 가져오고, 파일 원본(File Origin)을 `Unicode (UTF-8)`으로 조정합니다.  

2. Notepad++를 사용하여 CSV 파일을 열고, 인코딩(Encoding)을 `UTF-8`에서 `UTF-8-BOM`으로 변경합니다.  

결과:

 ![image](https://global.discourse-cdn.com/meta/original/4X/f/b/2/fb24c70b3d57f60f3f98bd210a81e2fec6760bbf.png)

이 두 가지 방법은 증상을 해결하는 데 효과적이지만, 근본 원인을 다루지는 않습니다.

* * *

추가 조사를 통해 이 문제에 대한 장기적인 해결책을 발견했습니다:

```javascript
// CSV 생성 과정으로, 'body'는 데이터 행을, 'header'는 헤더 행을 나타냅니다.
const csv = body.reduce((prev, current) => `${prev}\r\n${current}`, header);

// Excel은 파일이 UTF-8로 인코딩되었음을 나타내기 위해 바이트 순서 마크(BOM)가 필요합니다.
const BOM = Buffer.from('\uFEFF');

// BOM 헤더를 생성된 CSV 콘텐츠 앞에 연결합니다.
const bomCsv = Buffer.concat([BOM, Buffer.from(csv)]);

// 결과 버퍼를 문자열로 변환하여 반환합니다.
return bomCsv.toString();

// 반환된 문자열을 다운로드하여 Excel로 열면, 스프레드시트에 중국어 콘텐츠가 올바르게 표시됩니다.

```

결론적으로, Excel은 CSV 파일의 인코딩을 지정하는 메타데이터가 필요합니다. Microsoft는 이 목적으로 BOM(바이트 순서 마크) 헤더를 도입했습니다. 이 헤더는 다른 스프레드시트 소프트웨어에서는 무시될 수 있지만, Excel에는 매우 중요합니다. Excel을 포함한 다양한 소프트웨어와의 호환성을 보장하려면 CSV 생성 시 BOM 헤더를 포함하는 것이 필수적입니다.

팀에서 향후 버전에 이 해결책을 도입할 계획이 있는지 궁금합니다. 이를 통해 언어 지원 범위를 넓히고 버그 발생을 줄일 수 있을 것으로 기대됩니다.

이 문제에 관심을 가져 주셔서 감사합니다!

참고:  
[https://www.zhihu.com/question/21869078/answer/350728339](https://www.zhihu.com/question/21869078/answer/350728339)
