Mac과 Windows에서 Excel로 CSV 파일을 올바르게 여는 인코딩은 무엇입니까?


137

BOM이 아닌 UTF-8의 외부 문자가 포함 된 CSV 파일을 내보내는 웹앱이 있습니다. Windows와 Mac 사용자 모두 Excel에서 가비지 문자를받습니다. BOM을 사용하여 UTF-8로 변환을 시도했습니다. 엑셀 / 윈은 괜찮습니다. 엑셀 / 맥은 횡설수설합니다. Excel 2003 / Win, Excel 2011 / Mac을 사용하고 있습니다. 내가 시도한 모든 인코딩은 다음과 같습니다.

Encoding  BOM      Win                            Mac
--------  ---      ----------------------------   ------------
utf-8     --       scrambled                      scrambled
utf-8     BOM      WORKS                          scrambled
utf-16    --       file not recognized            file not recognized
utf-16    BOM      file not recognized            Chinese gibberish
utf-16LE  --       file not recognized            file not recognized
utf-16LE  BOM      characters OK,                 same as Win
                   row data all in first field

BOM이있는 UTF-16LE가 가장 좋지만 CSV는 그렇게 인식되지 않습니다. 필드 구분 기호는 쉼표이지만 세미콜론은 변경되지 않습니다.

두 세계에서 작동하는 인코딩이 있습니까?


1
모든 필드 데이터에 UTF-16LE을 사용하지만 쉼표에 8 비트 / ASCII 문자를 사용하면 어떻게됩니까? 이 기사 ( creativyst.com/Doc/Articles/CSV/CSV01.htm#CSVAndEncodings )를 기반으로 Excel은 구분 기호 대신 필드 데이터의 일부로 유니 코드 쉼표를 해석 할 수 있습니다.
jveazey

1
재미있는 팁 @jveazey. 나는 이것을 시도 할 것이다 : mb_convert_encoding($str, "UTF-16LE");내 수출 코드에서 결과를 여기에 게시하십시오.
Timm

이것이 도움이되지는 않지만 Windows에서 Excel 2007 SP2를 테스트했습니다 (Notepad2를 사용하여 테스트 파일 작성). UTF-16LE BOM (Windows에서와 동일한 결과) 및 UTF-16BE BOM (필드를 올바르게 구문 분석했지만 BOM은 A1의 처음 2 문자로 포함)을 제외한 모든 것이 작동했습니다.
jveazey


@ hveazey, 인용 된 질문에는 Windows-1252 코드 페이지를 추천하는 creechy의 답변이 있습니다. 그것은 내 경우에는 효과가 없었습니다 (독일어 움라우트와 샤프).
Timm

답변:


61

엑셀 인코딩

나는 발견 된 WINDOWS-1252엑셀을 다룰 때 가장 좌절로 인코딩. 기본적으로 Microsoft 자체의 독점 문자 세트이므로 Mac 및 Windows 버전의 MS-Excel에서 모두 작동한다고 가정 할 수 있습니다. 두 버전 모두 최소한 데이터를 올바르게 읽는 해당 "파일 원본"또는 "파일 인코딩"선택기가 포함되어 있습니다.

시스템 및 사용하는 도구에 따라이 인코딩은 이름이 될 수있다 CP1252, ANSI, Windows (ANSI), MS-ANSI아니면 그냥 Windows다른 변화들.

이 인코딩은 ISO-8859-1(일명 LATIN1기타) 의 상위 집합 이므로 어떤 이유로 ISO-8859-1사용할 수없는 경우 대체 할 수 있습니다 WINDOWS-1252. 다음과 같이 ISO-8859-1일부 문자가 누락되었습니다 WINDOWS-1252.

| Char | ANSI | Unicode | ANSI Hex | Unicode Hex | HTML entity | Unicode Name                               | Unicode Range            |
| €    | 128  | 8364    | 0x80     | U+20AC      | €      | euro sign                                  | Currency Symbols         |
| ‚    | 130  | 8218    | 0x82     | U+201A      | ‚     | single low-9 quotation mark                | General Punctuation      |
| ƒ    | 131  | 402     | 0x83     | U+0192      | ƒ      | Latin small letter f with hook             | Latin Extended-B         |
| „    | 132  | 8222    | 0x84     | U+201E      | „     | double low-9 quotation mark                | General Punctuation      |
| …    | 133  | 8230    | 0x85     | U+2026      | …    | horizontal ellipsis                        | General Punctuation      |
| †    | 134  | 8224    | 0x86     | U+2020      | †    | dagger                                     | General Punctuation      |
| ‡    | 135  | 8225    | 0x87     | U+2021      | ‡    | double dagger                              | General Punctuation      |
| ˆ    | 136  | 710     | 0x88     | U+02C6      | ˆ      | modifier letter circumflex accent          | Spacing Modifier Letters |
| ‰    | 137  | 8240    | 0x89     | U+2030      | ‰    | per mille sign                             | General Punctuation      |
| Š    | 138  | 352     | 0x8A     | U+0160      | Š    | Latin capital letter S with caron          | Latin Extended-A         |
| ‹    | 139  | 8249    | 0x8B     | U+2039      | ‹    | single left-pointing angle quotation mark  | General Punctuation      |
| Π   | 140  | 338     | 0x8C     | U+0152      | Π    | Latin capital ligature OE                  | Latin Extended-A         |
| Ž    | 142  | 381     | 0x8E     | U+017D      |             | Latin capital letter Z with caron          | Latin Extended-A         |
| ‘    | 145  | 8216    | 0x91     | U+2018      | ‘     | left single quotation mark                 | General Punctuation      |
| ’    | 146  | 8217    | 0x92     | U+2019      | ’     | right single quotation mark                | General Punctuation      |
| “    | 147  | 8220    | 0x93     | U+201C      | “     | left double quotation mark                 | General Punctuation      |
| ”    | 148  | 8221    | 0x94     | U+201D      | ”     | right double quotation mark                | General Punctuation      |
| •    | 149  | 8226    | 0x95     | U+2022      | •      | bullet                                     | General Punctuation      |
| –    | 150  | 8211    | 0x96     | U+2013      | –     | en dash                                    | General Punctuation      |
| —    | 151  | 8212    | 0x97     | U+2014      | —     | em dash                                    | General Punctuation      |
| ˜    | 152  | 732     | 0x98     | U+02DC      | ˜     | small tilde                                | Spacing Modifier Letters |
| ™    | 153  | 8482    | 0x99     | U+2122      | ™     | trade mark sign                            | Letterlike Symbols       |
| š    | 154  | 353     | 0x9A     | U+0161      | š    | Latin small letter s with caron            | Latin Extended-A         |
| ›    | 155  | 8250    | 0x9B     | U+203A      | ›    | single right-pointing angle quotation mark | General Punctuation      |
| œ    | 156  | 339     | 0x9C     | U+0153      | œ     | Latin small ligature oe                    | Latin Extended-A         |
| ž    | 158  | 382     | 0x9E     | U+017E      |             | Latin small letter z with caron            | Latin Extended-A         |
| Ÿ    | 159  | 376     | 0x9F     | U+0178      | Ÿ      | Latin capital letter Y with diaeresis      | Latin Extended-A         |

점을 유의 유로 기호가없는 . 이 테이블은 Alan Wood 에서 찾을 수 있습니다 .

변환

도구와 언어에 따라 변환이 다르게 수행됩니다. 그러나 query_result.csv알고 있는 파일 이 UTF-8인코딩 되어 있다고 가정합니다 . 다음을 WINDOWS-1252사용하여 변환하십시오 iconv.

iconv -f UTF-8 -t WINDOWS-1252 query_result.csv > query_result-win.csv

6
약간의 faff이지만, 이것은 유럽 문자가 포함 된 .csv 파일을 Mac OSX의 Excel로 가져 오는 데 대한 대답 인 것 같습니다
Fergie

1
진실. 대신 OP의 질문에 대답합니다. 귀하의 경우 먼저 "유럽 문자가 포함 된".csv 파일 "에 사용 된 인코딩을 알고 있어야합니다. 그런 다음을로 변환 할 수 있습니다 WINDOS-1252. Mac과 Windows Excel에서 모두 올바르게 해석 될 수 있습니다.
mikezter

1
이것은 실제 해결책이 아니며 조만간 WINDOWS-1252로 변환 할 수없는 캐릭터를 보게 될 것입니다.
Walter Tross

2
한자가 있으면 WINDOWS-1252가 실패합니다. BOM이있는 UTF-16LE이 유일한 옵션 인 것 같습니다.
XWang

분음 부호가있는 SQL 데이터 내보내기에 적합합니다.
motorbaby

26

BOM이있는 UTF-16LE의 경우 탭 문자를 쉼표 대신 구분자로 사용하면 Excel에서 필드를 인식합니다. 그것이 작동하는 이유는 Excel이 실제로 유니 코드 * .txt 파서를 사용하여 끝내기 때문입니다.

주의 사항 : 파일을 Excel에서 편집하여 저장하면 탭으로 구분 된 ASCII로 저장됩니다. 이제 문제는 파일을 다시 열면 Excel에서 파일이 실제 CSV (쉼표 포함)라고 가정하고 유니 코드가 아니라는 것을 확인하여 쉼표로 구분하여 파싱하므로 해시를 생성한다는 것입니다!

업데이트 : 위의 경고는 오늘 Excel 2010 (Windows)에서 적어도 일어나지 않는 것처럼 보이지만 다음과 같은 경우 동작 저장에 차이가있는 것으로 보입니다.

  • Excel을 편집하고 종료합니다 ( '유니 코드 * .txt'로 저장하려고 시도)

다음과 비교 :

  • 파일 편집 및 닫기 (예상대로 작동)

1
멋지지만주의 할 점은 해결책이 아닙니다. 최종 사용자는 손상된 Excel 시트에 만족하지 않습니다.
Timm

초기 파일 확장자를 * .txt로 변경하면 작동하지만 파일 형식과 Excel 간의 연결이 끊어집니다. 즉, 파일을 두 번 클릭하여 Excel에서 자동으로 열 수 없습니다.
Duncan Smart

그것은 나를 위해 작동하지 않습니다. 컴퓨터에 정통하지 않은 최종 사용자는 장애물없이 Excel에서 열어야합니다.
Timm

".csv"Excel 시트가 특수 문자와 구분 된 필드로 잘 보입니다. 바이트 순서 표시 (BOM)로 "\ ​​ufeff"로 출력 문자열을 시작한 다음 필드 분리를 위해 쉼표 대신 "\ t"탭을 사용하고 "utf-16LE"로 파일을 인코딩합니다. 이 페이지 덕분에 매력처럼 작동합니다!
괴짜 주식

첫 번째 줄 sep=,과 UTF16LE 인코딩은 저에게 효과적이며 다른 구분 문자가 필요하지 않습니다 (쉼표로 남아 있음). 두 번 클릭하여 파일을 열면 파일이 올바르게로드되고 셀 내의 특수 문자와 줄 바꿈이 그대로 유지됩니다. 단점 : sep=,내가 본 한 Excel을 제외한 모든 프로그램은 헤더를 인식하지 못합니다. 그러나 OpenOffice / LibreOffice는 어쨌든이 핵을 필요로하지 않습니다 (셀 내용의 줄 바꿈은 잘 작동하지만 텍스트 파일에서로드 / Excel의 열 도우미에 텍스트를 사용하면 셀의 줄 바꿈을 올바르게 처리하지 못합니다).
CodeManX

24

해결책은 없습니다. Excel 2011 / Mac은 인코딩 또는 후프 점프에 관계없이 움라우트 및 발음 구별 부호가 포함 된 CSV 파일을 올바르게 해석 할 수 없습니다. 누군가 다른 말을하게되어 기쁩니다!


4
WIN-1252 또는 ISO-8859-1 인코딩이 작동하는 것으로 나타났습니다. 내 대답을 참조하십시오.
mikezter

3
해결책은 UTF-16LE을 사용하고 탭을 사용하여 쉼표 대신 열을 구분하는 것입니다.
Tim Groeneveld

Win 및 Mac Tim에서 실제로 시도 했습니까? 앞서 언급했듯이 TSV는 필자의 경우 옵션이 아닙니다.
Timm

1
필자는 Mac과 Windows 버전의 Excel 모두에서 WIN-1252 인코딩을 사용하면 내보내기가 제대로 작동합니다. @Timm, 허용되는 답변 변경을 고려해야합니다.
Pierre Arnaud

2
이 작동을 발견 한 사람들을 위해 실제로 데이터 세트에 중국어와 같은 확장 문자가 있습니까? WIN-1252 인코딩은 범위를 벗어 났기 때문에 중단됩니다.
Bill Leeper

11

쉼표로 구분되고 세미콜론으로 구분 된 CSV 만 시도했습니다. 탭으로 구분 된 CSV (TSV라고도 함)를 시도한 경우 다음과 같은 답변을 찾을 수 있습니다.

UTF-16LEBOM (바이트 순서 마크), 탭 구분


그러나 : 당신은 주석에서 TSV가 당신을위한 옵션이 아니라고 언급했습니다 (귀하의 질문 에서이 요구 사항을 찾을 수는 없었습니다). 그 유감. 종종 TSV 파일을 수동으로 편집 할 수 있다는 것을 의미하며, 이는 아마도 좋은 생각이 아닙니다. TSV 파일의 육안 검사는 문제가되지 않습니다. 또한 편집기는 탭을 표시하기 위해 특수 문자를 표시하도록 설정할 수 있습니다.

그리고 네, Windows와 Mac에서 이것을 시도했습니다.


4

utf8로 인코딩 된 CSV를 Mac 용 Excel 2011로 가져 오는 클린 처는 다음과 같습니다. Microsoft는 "Mac 용 Excel은 현재 UTF-8을 지원하지 않습니다."라고 말합니다. Mac 용 Excel 2011 및 UTF-8

예, MS가는 길!


4

Mac에서 UTF-8로 CSV 파일을 읽는 가장 좋은 해결 방법은 파일을 XLSX 형식으로 변환하는 것입니다. Konrad Foerstner가 만든 스크립트를 찾았습니다.이 스크립트는 다른 구분 문자를 지원하여 조금 개선되었습니다.

Github https://github.com/brablc/clit/blob/master/csv2xlsx.py 에서 스크립트를 다운로드 하십시오 . 그것을 실행하려면 Excel 파일 조작을 위해 python 모듈 openpyxl 을 설치해야합니다 sudo easy_install openpyxl.


3

제 경우에는 이것이 효과가있었습니다 (Mac, Excel 2011, 키릴 문자 및 라틴 문자 모두 체코 분음 부호 포함)

  • 문자 세트 UTF-16LE (단순 UTF-16으로는 충분하지 않음)
  • BOM "\ xFF \ xFE"
  • 구분 기호로 \ t (탭)
  • 구분 기호와 CRLF도 인코딩하는 것을 잊지 마십시오 :-)
  • mb_convert_encoding 대신 iconv를 사용하십시오.

2

Mac OS 용 Excel 2011에서 Encoding.GetEncoding ( "10000")을 사용하지 않고 2 일 동안 낭비했지만 Microsoft OS와 동일한 iso를 사용하는 것으로 보입니다. 이를위한 가장 좋은 증거는 Excel 용 2011 MAC 파일을 특수 문자를 사용하여 파일로 만들어 CSV로 저장 한 다음 MAC 텍스트 편집기에서 열면 문자가 스크램블되는 것입니다.

나 에게이 접근법은 효과가있었습니다 .MAC OS에서 Excel 2011의 CSV 내보내기에는 특별한 서쪽 유로 피안 문자가 있습니다.

Encoding isoMacOS = Encoding.GetEncoding("iso-8859-1");
Encoding defaultEncoding = Encoding.Default; 

// Convert the string into a byte array.
byte[] defaultEncodingBytes = defaultEncoding.GetBytes(exportText);

// Perform the conversion from one encoding to the other.
byte[] ansiBytes = Encoding.Convert(defaultEncoding, isoMacOS, defaultEncodingBytes);

decodedString = isoMacOS.GetString(ansiBytes);

@ user525081 어떤 언어를 사용하고 있습니까? PHP로 번역 할 수 있습니까?
Timm

@Timm 자바 샘플 좋아하지만 PHP에서 외모 당신은 변환 할의 iconv 사용할 수있는 - de3.php.net/manual/en/function.iconv.php
인 Ashish 다타

OK @ user525081, 다른 답변과 같은 거래. 이것은 Mac 사용자를 대상으로 Windows 사용자를 lurch에 둡니다. 그리고 두 플랫폼 모두에서 작동하는 인코딩 인 원래 질문에 대답하지 않습니다. 감사.
Timm

2

BOM이없는 UTF-8은 현재 Excel Mac 2011 14.3.2에서 작동합니다.

UTF-8 + BOM은 작동하지만 BOM은 횡설수설로 렌더링됩니다.

UTF-16은 파일을 가져 와서 마법사를 완료하면 작동하지만 두 번 클릭하면 작동하지 않습니다.


2

Mac 2011 및 Windows Excel 2002 용 Excel에서 다음이 작동했습니다.

  1. Mac에서 iconv를 사용하여 파일을 UTF-16 Little-Endian으로 변환하고 이름을 * .txt로 지정합니다 (.txt 확장자는 Excel에서 텍스트 가져 오기 마법사를 실행하도록 강제 함).

    iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt

  2. Excel에서 파일을 열고 텍스트 가져 오기 마법사에서 다음을 선택하십시오.

    • 1 단계 : 파일 출처 : 무시합니다. 선택한 항목이 중요하지 않습니다.
    • 2 단계 : 구분 기호텍스트 한정자에 적절한 값 선택
    • 3 단계 : 필요한 경우 열 형식 선택

PS iconv로 작성된 UTF-16LE는 처음에 BOM 바이트 FF FE를 갖습니다.

PPS 내 원본 csv 파일은 UTF-8 형식 (처음에는 BOM 바이트 EF BB BF 포함)으로 Windows 7 컴퓨터에서 작성되었으며 CRLF 줄 바꿈을 사용했습니다. 쉼표는 필드 구분 기호로 사용되고 작은 따옴표는 텍스트 한정자로 사용되었습니다. 여기에는 ASCII 문자와 물결표, 움라우트 등의 라틴 문자와 키릴 문자가 포함되어 있습니다. 모두 Excel for Win 및 Mac에서 올바르게 표시됩니다.

PPPS 정확한 소프트웨어 버전 :
* Mac OS X 10.6.8
* Excel for Mac 2011 v.14.1.3
* Windows Server 2003 SP2
* Windows Excel 2002 v.10.2701.2625


당신은 BOM이없는 UTF-8 파일이있는 경우, iconv에서 UTF-16LE로 변환 것 없이 BOM (불행하게도 하나 추가의 iconv를 알 수있는 방법이 없습니다)
월터 Tross

2

내 Mac OS에서 Text Wrangler는 Excel로 작성된 CSV 파일을 "서부"인코딩으로 식별했습니다.

인터넷 검색 후이 작은 스크립트를 만들었습니다 ( Cygwin 과 함께 Windows 가용성에 대해 잘 모르겠습니다 ).

$ 고양이 /usr/local/bin/utf8.sh

#!/bin/bash

INPUTFILE="$1"

iconv -f macroman -c -t UTF-8 $INPUTFILE |tr '\r' '\n' >/tmp/file.$$.csv

mv $INPUTFILE ms_trash
mv /tmp/file.$$.csv $INPUTFILE

이것이 OS X 10.14.2 (및 Excel 2011)에서 나를 위해 일한 유일한 것입니다
Donald

1

제 경우에는 Preamble을 파일에 추가하면 문제가 해결되었습니다.

var data = Encoding.UTF8.GetBytes(csv);
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
return File(new MemoryStream(result), "application/octet-stream", "data.csv");

0

XLS 확장명과 "application / excel"mime-type을 사용하여 HTML을 출력하려고합니다. Windows에서 작동하지만 MacOS에서는 말할 수 없다는 것을 알고 있습니다.


@ royce23에게 감사하지만 다운로드 할 CSV 파일을 제공하고 있습니다. 마크 업의 크기가 크면 크롤링에 대한 응답이 느려지기 때문에 HTTP를 통해이를 제시 할 수 없습니다. 내 보낸 테이블에 수백만 개의 행이 포함될 수 있습니다.
Timm

css를 사용하면 HTML이 csv보다 작은 부분 일뿐입니다 (예 : <r> <c> id </ c> <c> name </ c> <c> phone </ c> </ r>
royce3

이해하는지 확실하지 않지만 서버에 CSV를 저장하고 다운로드 링크를 제공하고 있습니다. HTML 응답을 생성하면 너무 많은 PHP 메모리가 소모됩니다.
Timm

이 의지 작업합니다 (UTF-8 문자)하지만 세포 (내 줄 바꿈을 삽입 한 경우 br태그), Mac 용 Excel은 (Windows와 함께 작품) CSS을 무시 mso-data-placement:same-cell;
cropredy

0

이것은 나를 위해 작동

  1. BBEdit 또는 TextWrangler *에서 파일을여십시오.
  2. 파일을 유니 코드 (UTF-16 Little-Endian)로 설정하십시오 (줄 끝은 Unix 또는 Windows 일 수 있음). 저장!
  3. Excel에서 : 데이터> 외부 데이터 가져 오기> 텍스트 파일 가져 오기 ...

이제 핵심은 MacIntosh 를 File Origin으로 선택하는 것입니다 (첫 번째 선택이어야 함).

Excel 2011 (버전 14.4.2)을 사용하고 있습니다.

* 창 하단에 작은 드롭 다운이 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.