source

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

ittop 2023. 4. 12. 22:57
반응형

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

BOM이 아닌 UTF-8이 포함된 CSV 파일을 내보내는 웹 앱이 있습니다.Windows 사용자 및 Mac 사용자 모두 Excel에서 가비지 문자를 받습니다.BOM에서 UTF-8로 변환해 보았습니다만, Excel/Win은 문제없고, Excel/Mac은 횡설수설합니다.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는 인식되지 않습니다.필드 구분자는 쉼표이지만 세미콜론을 사용해도 변경되지 않습니다.

양쪽에서 동작하는 부호화가 있습니까?

Excel 인코딩

WINDOWS-1252엑셀을 다룰 때 가장 답답하지 않은 인코딩입니다.기본적으로 마이크로소프트만의 고유한 문자 집합이므로, Mac과 Windows 버전의 MS-Excel 모두에서 작동한다고 가정할 수 있습니다.두 버전 모두 최소한 데이터를 올바르게 읽는 "파일 원본" 또는 "파일 인코딩" 선택기를 포함합니다.

있는 , 이 에는, 「이러다」라고 하는 이름도 수 .CP1252,ANSI,Windows (ANSI),MS-ANSI 그냥 '그냥'일 수도 있어요.Windows , , , , , , , , .

은 이음음음음음음음음음음음 of of of of of of of 입니다.ISO-8859-1 명kaka (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         |

유로화 기호가 없습니다.이 테이블은 앨런 우드에서 찾을 수 있습니다.

변환

변환은 도구와 언어에 따라 다르게 이루어집니다.파일이 가정해 보겠습니다.query_result.csvUTF-8부호화되었습니다.을 환환으로 변환하다WINDOWS-1252를 사용합니다.iconv:

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

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

주의: 파일을 Excel로 편집하여 저장하면 탭 구분 ASCII로 저장됩니다.문제는 파일을 다시 열 때 Excel이 실제 CSV(쉼표 포함)라고 가정하고 Unicode가 아님을 확인하고 쉼표로 구분하여 해석하면 해시가 된다는 것입니다.

업데이트: 적어도 Excel 2010(Windows)에서는 현재 위의 경고는 발생하지 않은 것 같습니다.다만, 다음의 경우는 보존 동작에 차이가 있는 것 같습니다.

  • Excel을 편집하고 종료합니다('Unicode *.txt'로 저장하려고 합니다).

비교:

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

개요는 다음과 같습니다.해결책은 없다.Excel 2011/Mac에서는 부호화 또는 후프 점핑에 관계없이 umlauts 및 분음 마크가 포함된 CSV 파일을 올바르게 해석할 수 없습니다.누군가 나에게 다르게 말해준다면 기쁠 텐데!

쉼표로 구분된 CSV와 세미콜론으로 구분된 CSV만 사용해 보았습니다.탭으로 구분된 CSV(TSV라고도 함)를 사용해 보면 다음과 같은 답을 찾을 수 있습니다.

UTF-16LE (BOM(바이트 주문 마크), 탭 구분)


, 코멘트에서 TSV는 선택사항이 아니라고 하셨는데, 이 요건은 고객님의 질문에서 찾을 수 없었습니다.그것 참 안됐군요.이는 TSV 파일을 수동으로 편집할 수 있음을 의미하며 이는 권장되지 않을 수 있습니다.TSV 파일의 육안 확인은 문제 없습니다.또, 탭을 마크 하는 특수 문자를 표시하도록 에디터를 설정할 수 있습니다.

네, Windows와 Mac에서 이 기능을 사용해 보았습니다.

Mac용 Excel 2011에 utf8 인코딩 CSV를 가져오는 방법에 대한 자세한 내용은 다음과 같습니다. Microsoft는 "Mac용 Excel은 현재 UTF-8을 지원하지 않습니다." Mac용 Excel 2011UTF-8

야호, MS 파이팅!

Mac에서 UTF-8을 사용하여 CSV 파일을 읽는 가장 좋은 회피책은 파일을 XLSX 형식으로 변환하는 것입니다.Konrad Foerstner가 만든 스크립트를 찾았습니다.각 딜리미터 문자의 서포트를 추가해 조금 개선했습니다.

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

내 경우, 이 방법은 효과가 있었다(Mac, Excel 2011, 체코어 분음 문자로 키릴 문자 및 라틴 문자 모두):

  • Charset UTF-16LE(단순히 UTF-16으로는 불충분)
  • BOM "\xFF\xFE"
  • 구분자로 \t(탭)
  • 구분 기호와 CRLF도 인코딩해야 합니다.-)
  • mb_convert_encoding 대신 iconv 사용

Mac OS용 Excel 2011은 인코딩을 사용하지 않는 것 같습니다.Get Encoding ("10000")은 예상대로 Microsoft OS와 동일한 iso를 사용하여 이틀을 낭비했습니다.이에 대한 가장 좋은 증거는 Excel 2011 for MAC에서 특수 문자를 사용하여 파일을 만들고 CSV로 저장한 다음 MAC 텍스트에디터로 열면 문자가 스크램블됩니다.

이 접근방식은 효과가 있었습니다.즉, Mac OS에서의 Excel 2011에서의 CSV export에는 다음과 같은 특별한 서유럽 문자가 포함되어 있습니다.

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);

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

UTF-8 + BOM은 동작하고 있습니다만, BOM은 횡설수설하고 있습니다.

UTF-16은 파일을 Import하여 마법사를 완료하면 동작하지만 더블클릭만 하면 동작하지 않습니다.

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

  1. Mac에서 iconv를 사용하여 파일을 UTF-16 Little-Endian으로 변환하고 *.txt라는 이름을 붙입니다(.txt 확장자는 Excel로 텍스트 Import 마법사를 실행합니다).

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

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

    • 순서 1: 파일 송신원:무시, 무엇을 선택하든 상관없습니다.
    • 2단계: 구분자 및 텍스트 한정자의 적절한 값 선택
    • 3단계: 필요한 경우 열 형식을 선택합니다.

PS iconv에 의해 작성된 UTF-16LE의 선두에는 BOM 바이트 FFE가 있습니다.

PPS 원본 csv 파일은 Windows 7 컴퓨터에서 UTF-8 형식(처음에는 BOM 바이트 EF BB BF)으로 생성되어 CRLF 줄 바꿈을 사용했습니다.필드 구분자로 쉼표를 사용하고 텍스트 한정자로 단일 따옴표를 사용했습니다.그것은 ASCII 문자, tildes, umlaut 등이 있는 다른 라틴 문자, 그리고 약간의 키릴 문자를 포함하고 있었다.모두 Excel for Win과 Mac 양쪽에 올바르게 표시됩니다.

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

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

구글 검색 후 이 작은 스크립트를 작성했습니다(Windows의 가용성에 대해서는 잘 모르겠습니다만, Cygwin을 사용하는 경우도 있습니다).

$ cat /usr / local / bin / utf8 。

#!/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

내 경우 파일에 프리암블을 추가하면 문제가 해결됩니다.

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

csv 대신 XLS 확장자 및 "application/excel" mime-type으로 html 출력을 시도합니다.Windows에서 작동하지만 MacOS에서는 사용할 수 없습니다.

난 이거면 돼

  1. BBEdit 또는 TextWrangler*에서 파일을 엽니다.
  2. 파일을 Unicode(UTF-16 Little-Endian)로 설정합니다(회선 엔딩은 Unix 또는 Windows로 할 수 있습니다).세이브!
  3. Excel의 경우 [Data]> [ Get External Data ]> [ Import Text File ]...

여기서 중요한 점은 파일 원본으로 MacIntosh를 선택합니다(첫 번째 선택 항목입니다).

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

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

자바(UTF-16LE with BOM)를 사용하여 이 문제를 해결합니다.

String csvReportStr = getCsvReport();
byte[] data = Charset.forName("UTF-16LE").encode(csvReportStr)
    .put(0, (byte) 0xFF)
    .put(1, (byte) 0xFE)
    .array();

에는 CSV 「」를 사용할 .TAB구분자로 사용합니다.CSV 「Windows」MAC OS X 「MAC OS X」입니다.

참조처:BOM을 사용하여 UTF-16LE 바이트 어레이를 인코딩/디코딩하려면 어떻게 해야 합니까?

언급URL : https://stackoverflow.com/questions/6588068/which-encoding-opens-csv-files-correctly-with-excel-on-both-mac-and-windows

반응형