일부 데이터를 CSV 파일로 내보내는 응용 프로그램의 일부를 개발 중입니다. 응용 프로그램은 모든 수준에서 다국어 특성으로 인해 항상 UTF-8을 사용합니다. 그러나 Excel에서 이러한 CSV 파일 (예 : 분음 부호, 키릴 문자, 그리스 문자 포함)을 열면 다음과 같은 예상 결과를 얻을 수 없습니다 Г„/Г¤, Г–/Г¶
. 그리고 Excel에서 열린 CSV 파일이 UTF-8로 인코딩되어 있다는 것을 Excel에서 이해하도록하는 방법을 모르겠습니다. 또한 UTF-8 BOM을 지정하려고 시도 EF BB BF
했지만 Excel은이를 무시합니다.
해결 방법이 있습니까?
PS 어떤 도구가 Excel처럼 작동 할 수 있습니까?
최신 정보
나는 커뮤니티를 질문의 공식화와 혼동했다고 말해야한다. 이 질문을 할 때 유창하고 투명한 방식으로 사용자에게 아무런 문제없이 Excel에서 UTF-8 CSV 파일을 여는 방법을 요청했습니다. 그러나 나는 자동으로 그것을 요구하는 잘못된 공식을 사용했습니다 . 이는 매우 혼란스럽고 VBA 매크로 자동화와 충돌합니다. 이 질문에 대해 가장 감사하는 두 가지 답변이 있습니다. Alex의 첫 번째 답변 https://stackoverflow.com/a/6002338/166589 .이 답변을 수락했습니다. 두 번째는 Mark https://stackoverflow.com/a/6488070/166589조금 후에 나타났습니다. 유용성 관점에서 Excel은 사용자에게 친숙한 UTF-8 CSV 지원이 부족한 것처럼 보였으므로 두 대답이 모두 올바른 것으로 간주 하고 Alex가 실제로 Excel을 할 수 없다고 말했기 때문에 Alex의 대답을 먼저 수락했습니다. 투명하게. 그것이 내가 여기서 자동으로 혼동하는 것입니다. Mark의 답변은 고급 사용자가 예상 한 결과를 얻을 수있는보다 복잡한 방법을 홍보합니다. 두 대답 모두 훌륭하지만 Alex의 대답은 명확하게 지정되지 않은 질문에 조금 더 잘 맞습니다.
업데이트 2
5 개월 후 마지막 편집 후 Alex의 대답이 어떤 이유로 사라지는 것을 알았습니다. 나는 이것이 기술적 인 문제가 아니기를 바란다. 그리고 지금 어떤 대답이 더 큰지에 대한 더 이상의 논의가 없기를 바란다. 그래서 나는 Mark의 대답을 가장 좋은 것으로 받아들이고 있습니다.
답변
Alex는 정확하지만 csv로 내 보내야하므로 csv 파일을 열 때이 조언을 사용자에게 제공 할 수 있습니다.
- 내 보낸 파일을 CSV로 저장
- 엑셀 열기
- 데이터-> 외부 데이터 가져 오기-> 데이터 가져 오기를 사용하여 데이터 가져 오기
- “csv”파일 형식을 선택하고 파일을 찾습니다
- 가져 오기 마법사에서 File_Origin을 “65001 UTF”로 변경하십시오 (또는 올바른 언어 문자 식별자를 선택하십시오).
- 구분 기호를 쉼표로 변경
- 가져올 곳을 선택하고 마침
이런 식으로 특수 문자가 올바르게 표시되어야합니다.
답변
UTF-8 바이트 순서 표식은 UTF-8을 사용하고 있다는 사실을 Excel 2007+에서 알 수 있습니다. ( 이 SO 게시물 참조 ).
아무도 같은 문제가있는 경우 .NET의 UTF8 인코딩 클래스는 GetBytes()
호출 에서 바이트 순서 표시자를 출력하지 않습니다 . BOM을 출력 하려면 스트림 을 사용 하거나 해결책을 사용해야 합니다 .
답변
BOM을 무시한 버그는 Excel 2013에서 수정 된 것으로 보입니다. 키릴 문자와 동일한 문제가 있었지만 BOM 문자를 추가하면 \uFEFF
도움이되었습니다.
답변
너무 많은 답변이 있지만 그 질문에 아무도 답변하지 않는 것은 놀라운 일입니다.
“이 질문을 할 때 사용자에게 아무런 문제없이 Excel에서 UTF-8 CSV 파일을 여는 방법을 요청했습니다 …”
사용자에게 Excel 구성 방법을 수동으로 제공하고 싶지 않기 때문에 200 개 이상의 투표로 허용 된 답변으로 표시된 답변은 쓸모가 없습니다. 그 외에도이 매뉴얼은 하나의 Excel 버전에 적용되지만 다른 Excel 버전에는 다른 메뉴와 구성 대화 상자가 있습니다. 각 Excel 버전마다 설명서가 필요합니다.
그렇다면 간단한 더블 클릭으로 Excel에서 UTF8 데이터를 표시하는 방법은 무엇입니까?
적어도 Excel 2007에서는 UTF8 BOM이 무시되고 가비지 만 표시되므로 CSV 파일을 사용하면 불가능합니다. 이것은 이미 Lyubomyr Shaydariv의 질문의 일부입니다.
“또한 UTF-8 BOM EF BB BF를 지정하려고했지만 Excel은이를 무시합니다.”
같은 경험을합니다. 러시아어 또는 그리스어 데이터를 UTF8 CSV 파일로 BOM을 사용하여 Excel에서 가비지로 만듭니다.
UTF8 CSV 파일의 내용 :
Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ
Excel 2007의 결과 :
해결책은 CSV를 전혀 사용하지 않는 것입니다. 이 형식은 Microsoft에서 매우 어리석게 구현하여 쉼표 또는 세미콜론 을 구분 기호로 사용하는 경우 제어판 의 지역 설정에 따라 다릅니다 . 따라서 동일한 CSV 파일이 한 컴퓨터에서 올바르게 열리지 만 다른 컴퓨터에서는 열리지 않을 수 있습니다. “CSV”는 ” 쉼표로 구분 된 값 “을 의미 하지만 예를 들어 독일어 Windows에서는 기본적으로 세미콜론을 구분 기호로 사용해야하지만 쉼표는 작동하지 않습니다. (여기서 이름은 SSV = 세미콜론으로 구분 된 값이어야 함) CSV 파일은 다른 언어 버전의 Windows간에 교환 할 수 없습니다. 이것은 UTF-8 문제의 추가 문제입니다.
Excel은 수십 년 동안 존재합니다. 지난 몇 년 동안 Microsoft가 CSV 가져 오기와 같은 기본 기능을 구현할 수 없다는 것은 부끄러운 일입니다.
그러나 동일한 값을 HTML 파일에 저장하고 파일 확장자가 XLS 인 BOM을 사용하여 해당 파일을 UTF8 파일로 저장 하면 올바른 결과를 얻을 수 있습니다.
UTF8 XLS 파일의 내용 :
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
Excel 2007의 결과 :
Excel에서 올바르게 표시되는 HTML의 색상을 사용할 수도 있습니다.
<style>
.Head { background-color:gray; color:white; }
.Red { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>
Excel 2007의 결과 :
이 경우 테이블 자체에만 검은 색 테두리와 선이 있습니다. 모든 셀에 눈금 선을 표시하려면 HTML에서도 가능합니다.
<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>MySuperSheet</x:Name>
<x:WorksheetOptions>
<x:DisplayGridlines/>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
</head>
<body>
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
</body>
</html>
이 코드는 워크 시트의 이름을 지정할 수도 있습니다 (여기서는 “MySuperSheet”).
Excel 2007의 결과 :
답변
이 해결 방법을 사용했습니다.
- CSV를 UTF-16 LE로 변환
- 파일 시작 부분에 BOM 삽입
- 필드 구분자로 탭 사용
답변
PHP로 생성 된 CSV 파일과 동일한 문제가있었습니다. "sep=,\n"
내용 시작 부분 (물론 BOM 이후)을 통해 구분 기호를 정의 할 때 Excel에서 BOM을 무시했습니다 .
따라서 "\xEF\xBB\xBF"
내용의 시작 부분에 BOM ( )을 추가 하고 세미콜론을 구분 기호로 설정 fputcsv($fh, $data_array, ";");
하면 트릭이 수행됩니다.
답변
과거에도 같은 문제가있었습니다 (Excel에서 읽을 수 있고 다른 도구에서도 읽을 수있는 파일을 만드는 방법). CSV 대신 TSV를 사용하고 있지만 인코딩과 동일한 문제가 발생했습니다.
Excel에서 UTF-8을 자동으로 인식하는 방법을 찾지 못했으며 파일 소비자에게 파일을 여는 방법에 대한 복잡한 지침을 기꺼이 적용 할 수 없었습니다. 그래서 UTF-8 대신 UTF-16le (BOM 포함)로 인코딩했습니다. 크기는 두 배이지만 Excel은 인코딩을 인식 할 수 있습니다. 그리고 그들은 잘 압축되므로 크기는 거의 (그러나 슬프게도 결코) 중요하지 않습니다.