UTF-8 CSV 파일에 BOM (바이트 순서 표시)이 포함되어야합니까?


37

업무용 소프트웨어를 사용하면 특정 데이터를 CSV 로 저장할 수 있습니다 . 야생에서 사용되는 다양한 형식 (모두 "CSV")이 많으므로 "기본 형식"의 모양을 결정하려고합니다.

  • 라인 / 필드 구분 기호 및 이스케이프와 관련하여 사용할 수있는 표준이 있습니다. RFC 4180 .

  • 텍스트 인코딩과 관련하여 UTF-8 은 "기본 텍스트 파일 형식"으로 지난 10 년 동안 등장한 것으로 보이므로이를 사용할 것입니다.

열린 질문 중 하나는 다음과 같습니다. 시작시 BOM 을 추가해야합니까 ? 일반적으로 BOM 사용에 대한 여러 의견과 장단점을 읽었지만 CSV 파일에서 BOM 사용에 대한 "공식적인"권장 사항 또는 적어도 일종의 커뮤니티 합의가 있습니까?


7
BOM이 있으면 UTF-8이 아닙니다. 그러나 프로그램이 원하는 형식은 무엇입니까? BOM (주로 마이크로 슬로)이 필요한 경우 UTF-8 + BOM ≠ UTF-8을 추가해야합니다.
ctrl-alt-delor

3
CSV는 생성하기가 훨씬 쉽지만, 특히 7 비트 ASCII에서 벗어나면 호환성 문제가 너무 많아서 사용자가 CSV를 여는 것이 목표라면 실제 XLSX를 생성하는 것이 좋습니다. Excel에서 (다른 소프트웨어에서 다시 가져 오기보다는 구분 기호, 인코딩 등의 옵션을 제공해야합니다). 대부분의 언어를위한 라이브러리가 있으며, 많은 시간을 절약 할 수 있습니다.
jcaron

2
CSV 경로를 사용하는 경우 여러 버전의 Excel을 사용하여 Mac과 PC에서 파일을 열 때 어떤 일이 발생하는지 확인하십시오. 또한 파일을 두 번 클릭하여 파일을 열거 나 메뉴를 통해 파일을 열면 일부 버전의 Excel이 동일하게 작동하지 않습니다.
jcaron

2
Excel에서 올바르게 열리면 왜 중요합니까? 질문에 아무것도 ... Excel에서 생성 된 파일을 구문 분석 할 수 있어야 상태 없습니다
rubenvb

답변:


55

UTF-8 은 아니지만 주석의 다양한 경고를 참조하십시오.

UTF-16 / 32와 달리 불필요하며 (UTF-8에는 바이트 순서가 없음) 유니 코드 표준 에서는 권장되지 않습니다 . BOM에서 UTF-8을 "와일드하게"보는 것은 매우 드물기 때문에, 정당한 이유가없는 한 (예 : 주석이있는 경우 BOM을 예상하는 소프트웨어로 작업 할 것) BOM이없는 접근법을 권장합니다. .

Wikipedia 는 BOM을 강제하고 기대하는 Microsoft 소프트웨어를 주로 언급하지만, 작업하지 않는 한 사용하지 마십시오.


28
BOM이 필요한 광범위한 소프트웨어도 있습니다. Excel에서는 CSV 파일을 "ANSI"(예 : 로컬 호환성 로캘)가 아닌 UTF-8로 올바르게 식별하기 위해 BOM이 필요합니다. 그러나 Excel에서는 이러한 파일을 저장할 때 이상한 작업을 수행 하므로 Excel로 파일을 열려면 CSV 내보내기 대신 "실제"Excel 내보내기를 사용하는 것이 좋습니다.
Heinzi

21
@Heinzi CSV와 Excel로 작업 할 때 실제로 이길 수 없다는 사실을 오래 전에 배웠습니다. 단순히 CSV 리더기입니다. 일반 사용자가 기대하는 것이 너무 나쁩니다.
파이프

9
@Voo : UTF-8에 BOM을 요구하면 표준이 " 필요하거나 권장되지 않음 "을 고려하여 표준을 위반하는 것입니다 .
중복 제거기

12
@Deduplicator : MS-DOS 및 Windows 시스템에는 UTF-8 이외의 인코딩으로 된 레거시 텍스트 파일이 많이 있습니다. 고급 응용 프로그램을 사용하면 텍스트 파일을 열 때 인코딩하는 방법을 지정할 수 있지만 종종 "자동"옵션이 포함됩니다. 사용자가 "UTF-8"을 선택하면 BOM이 있거나없는 UTF-8 파일이 올바르게 열립니다. 사용자가 "auto"를 선택하면 BOM이없는 일부 UTF-8 파일이 다른 인코딩을 사용하는 것으로 잘못 식별 될 수 있습니다. "잘못 식별 된"파일과 비트 비트가 동일 할 수 있기 때문에 응용 프로그램이 다르게 수행 할 작업이 무엇인지 잘 모르겠습니다.
supercat

7
@Voo : BOM이 불법 인 다른 형식 별 요구 사항과 충돌합니다. 예를 들어 BOM이있는 쉘 스크립트 #!가 유효하지 않습니다. 기껏해야 UTF-8의 BOM은 "허용되지 않습니다. 형식 / 응용 프로그램 특정 요구 사항이이를 배제 할 수없는 경우"허용되지 않으므로 "허용되지"않아야합니다. 표준은 실제로는 안됩니다.
R ..

8

UTF-8이 이제는 일반적으로 허용되지만 널리 퍼져있는 규칙 AFAIK는 아직 없습니다.

BOM은 끔찍한 인공물입니다.

폭이 0 인 공간입니다.

일부 소프트웨어는 문자 만 포함하고 첫 번째 열 이름이 깨져서 이상한 BOM이 표시 될 수 있습니다.

첫 번째 값을 손상시키는 값 줄에 대해 헤더 행이 복사 될 수 있습니다.

일부 Windows 소프트웨어에서는 로컬 Windows 시스템에서 사용하는 ANSI 인코딩 중 하나와 UTF-8을 구별해야합니다. 메모장, 엑셀.

슬픈 점은 BOM을 지원해야한다는 것입니다. 선택 사항 일 수 있습니다.

파일 이름 지정 체계를 사용하십시오 (...- utf8.txt, ...- utf8bom.txt).


많은 경우에 HTML 을 내보내기 대안으로 사용할 수 있습니다 . 파일에서 인코딩을 설정할 수 있습니다. 추가 기능은 행과 셀의 배경 / 배경색입니다. 수출 품질을 높입니다.


15
형식이 "내보내기 품질을 향상시키는 지"여부는 파일의 의도 된 사용에 크게 좌우됩니다. CSV는 종종 간단한 기계 판독 가능 형식으로 사용되므로 수신자가 HTML을 구문 분석하는 것이 대신 큰 단점이 됩니다.
IMSoP

5
이름 지정 체계를 선택하는 경우 청중을 염두에 두십시오. -utf8-windows.csv더 나은. 거의 모든 사람이 컴퓨터의 맥락에서 Windows가 무엇인지 알고 있지만 바이트 주문 표시가 무엇인지 아는 사람은 훨씬 더 적습니다.
MSalters 2018 년

2
@Davislor는 널리 알려진 표준 인 경우 가능합니다. 그렇지 않으면 tschüß가비지 에 대한 오류 보고서가 나오지만 tschüß기록되어야합니다. StackOverflow에서 많은 IT 오류는 인코딩에 관한 것입니다. 최종 사용자도 문제를 경험하게됩니다.
Joop Eggen

3
@JoopEggen 정확히 어떤 커뮤니티에서 "확장 된 알려진 표준"? 지금은 거의 10 년 동안 소프트웨어 개발을하고있다 그리고 나는 것을 본 적이 - 심지어 창문에, 그리고 확실 하지 당신은 거의 항상 UTF-8 처리 리눅스, OSX에.
큐빅

1
@JustinTime 몇 년 전부터 예,하지만 이전은 아닙니다. MS 개발자는 그렇게 나쁘지 않습니다 (Posix 호환, 이제 UTF-8 지원).
Joop Eggen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.