Excel에서 UTF-8 CSV 파일을 자동으로 인식하도록 할 수 있습니까?


453

일부 데이터를 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의 대답을 가장 좋은 것으로 받아들이고 있습니다.


1
탭으로 구분 된 파일을 사용할 수 있습니까? 그렇다면 더 많은 운이있을 수 있습니다.
팀 페리

8
Office 2010+ : 최상의 기능 : BOM과 \t구분 기호로 UTF-16LE . 영어 및 영어 이외의 Excel 설정에서 작동합니다. Ctrl-S파일 형식 등을 선택하지 않고 누를 수 있습니다. 유니 코드 문자를 유지합니다.
Sebastian

@Duncan 솔직히 말해서, 나는 혼란스럽고 "판단하기"어렵다. 나는 2 년 전에 alex의 대답을 받아 들였고 (5 월 14 일 Q와 A 모두) Mark는 놀랍게도 내 질문에서 더 많은 점수를 얻은 까다로운 해결 방법을 제안한다고 대답했습니다 (실제로는 확인하지 못했습니다). 뿐만 아니라 인기. 우리는 실제로 오래 전에 내 프로젝트에서 Excel 지원을 거부했으며, Excel이 보였고 CSV를 잘못 처리하는 것처럼 보였을 수도 있습니다 (아직 잘못된 경우 수정하십시오). 말하기 어렵다, 미안
Lyubomyr Shaydariv

2
Alex의 답변이 중재자에 의해 삭제되었습니다. 설명은 없었지만 평판이 충분하면 여전히 볼 수 있습니다.
Mark Ransom

1
타임머신은 아직 존재하지 않기 때문에 동의하지 않아도됩니다.
osexpert 16:24에

답변:


398

Alex는 정확하지만 csv로 내 보내야하므로 csv 파일을 열 때이 조언을 사용자에게 제공 할 수 있습니다.

  1. 내 보낸 파일을 CSV로 저장
  2. 엑셀 열기
  3. 데이터-> 외부 데이터 가져 오기-> 데이터 가져 오기를 사용하여 데이터 가져 오기
  4. "csv"파일 형식을 선택하고 파일을 찾습니다
  5. 가져 오기 마법사에서 File_Origin을 "65001 UTF"로 변경하십시오 (또는 올바른 언어 문자 식별자를 선택하십시오).
  6. 구분 기호를 쉼표로 변경
  7. 가져올 곳을 선택하고 마침

이런 식으로 특수 문자가 올바르게 표시되어야합니다.


163

UTF-8 바이트 순서 표식은 UTF-8을 사용하고 있다는 사실을 Excel 2007+에서 알 수 있습니다. ( 이 SO 게시물 참조 ).

아무도 같은 문제가있는 경우 .NET의 UTF8 인코딩 클래스는 GetBytes()호출 에서 바이트 순서 표시자를 출력하지 않습니다 . BOM을 출력 하려면 스트림사용 하거나 해결책을 사용해야 합니다 .


18
UTF-8 BOM을 삽입하는 것이 좋습니다. 그 후에는 투명합니다.
vy32

12
나는 쉽게에서 .CSV를 변환 메모장을 ++ 사용 UTF-8UTF-8 with BOM
세바스티앙

3
예-최고의 솔루션입니다. http 응답에서 헤더 설정과 관련된 많은 혼란스러운 게시물. 이것은 문제를 해결합니다. 메모장에서 파일을 열고 UTF-8 옵션을 사용하여 바로 다시 저장할 때도 마찬가지입니다. 바이트 순서 표시자를 추가합니다.
user369142

1
@ Elmue : 아마도 (나와 같이) 바이트 순서 마커로 저장 한다고 생각 했지만 일부 라이브러리가 생각했던 방식으로 작동하지 않았기 때문이 아닙니다. 나는이 답변을 추가하는 것이 가치가 있다는 것을 알았고, 다른 많은 사람들도 그것을 유용하게 사용했습니다. 어쨌든 CSV를 사용하지 말라고 말하거나 사용자에게 기괴한 방법으로 파일을 여는 방법을 알려주는 것보다 더 나은 대답 인 것 같습니다.
StriplingWarrior

1
Mac 버전의 Excel은 여전히 ​​BOM을 무시합니다. (Mac 2011 용 Excel.)
Thomas Andrews

74

BOM을 무시한 버그는 Excel 2013에서 수정 된 것으로 보입니다. 키릴 문자와 동일한 문제가 있었지만 BOM 문자를 추가하면 \uFEFF도움이되었습니다.


8
Java로 생성 된 CSV 파일의 시작 부분에 \ uFEFF를 추가 했으므로 Excel에서 파일을 올바르게 열 수 있습니다! Thx
Galdo

16
그것은 내 문제도 해결했습니다 .php에서 다음과 같이 보입니다 : $utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText;
압둘라

@updola이 의견에 대단히 감사합니다. 시간을 절약했습니다.
nathan hayfield

UTF-8은 정의상 BOM 문자를 사용하지 않아야합니다. Excel에서 BOM을 읽는 방식은 ASCII와의 하위 호환성 인 Unicode보다 UTF-8의 이점을 향상시킵니다. BOM을 추가하면 Excel이 작동하지만 다른 적절한 UTF-8 / ASCII 파일 읽기는 중단됩니다.
넬슨

1
\ FE \ FF는 Mac OS Excel 2016을 전체 파일을 일본어 상형 문자로 만듭니다.
Nakilon

55

너무 많은 답변이 있지만 그 질문에 아무도 답변하지 않는 것은 놀라운 일입니다.

"이 질문을 할 때 사용자에게 아무런 문제없이 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 UTF8 엑셀

해결책은 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의 결과 :

UTF8 HTML 엑셀

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의 결과 :

UTF8 HTML 엑셀

이 경우 테이블 자체에만 검은 색 테두리와 선이 있습니다. 모든 셀에 눈금 선을 표시하려면 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의 결과 :

여기에 이미지 설명을 입력하십시오


1
그리고 사람들이 여전히 그것에 대해 대답하는 것도 믿어지지 않습니다. :) 그러나 CSV는 죽었다고 주장합니다. CSV는 매우 단순한 일반 스트리밍 형식이며, 프로젝트에 참여했을 때 구성 요소 상호 작용에도 실제로 많이 사용했습니다. 나는 너무 대표성이 있기 때문에 HTML 형식을 사용하지 않을 것이며, 그 프로젝트의 사용자가 Excel로 데이터를 HTML로 내보내도록 만들 수 없었습니다. Excel은 UTF-8 CSV로 빨려 들었고 그 이후 5 년 동안 무엇이 바뀌 었는지 전혀 알지 못합니다. 그러나 쉼표, 세미콜론 및 탭으로 구분 된 파일은 진정한 광기입니다.
Lyubomyr Shaydariv

5
Google이 여기에 질문을 제공하기 때문에 사람들이 여전히 귀하의 질문에 대답하는 것은 놀라운 일이 아닙니다. 모두 같은 질문이 있습니다. Google에 "excel csv utf8"이라는 단어를 3 개 입력하면 전 세계에서 가장 먼저 결과를 얻을 수 있습니다. 당신은 베스트셀러를 썼습니다!
Elmue

8
여기에 다른 답변이 Excel에서 CSV 파일을 올바르게 여는 방법이 무엇인지 지적하는 데 시간이 걸렸 으므로이 답변도 그렇게하지 않는다는 것을 언급 할 가치가 있습니다. 원래 승인 된 답변 (중재자가 삭제 한)은 데이터를 Excel 파일로 직접 내보내거나 HTML 파일을 내보내 사용자가 Excel에서 파일을 열 수 있도록하는 것이 좋습니다. 이러한 솔루션 중 하나는 XLS 파일 확장자를 가진 HTML 파일을 저장하는 것보다 덜 해킹되지만 실제로 질문에 대한 답변이 제안되지 않았습니다.
StriplingWarrior

3
@Warrior : "..하지만 실제로 질문에 대한 답변은 없습니다." 이것은 정확하지 않습니다. 나는 그 질문에 대답했습니다 : 적어도 Excel 2007에서는 불가능하지 않습니다. 이것이 정답입니다. Excel에서 UTF8 BOM을 무시하고 데이터를 ANSI로 해석하는 경우 파일을 두 번 클릭하여 그리스어 또는 러시아어 텍스트를 CSV를 통해 Excel로 가져올 수있는 방법이 없습니다 (질문 : "문제 없음") ). 내가 제안하는 것은 더블 클릭으로 모든 Excel 버전에서 작동하며 Excel 메뉴에서 추가 단계를 요구하지 않는 작동 솔루션입니다.
Elmue

2
이 질문에 대한 답변을 제공하지 않을뿐만 아니라 CSV가 "레거시"및 "죽음"이라고 말하는 것은 완전히 잘못된 것입니다. 당신이 그것을 사용하지 못한다고해서 그것이 죽었다는 것을 의미하지는 않습니다. 또한 당신은 그것이 역사나 오늘날 얼마나 널리 사용되는지 이해하지 못합니다. 이것은 작은 패킷 크기로 인해 XML보다 낫고 여기서 문제는 Microsoft가 단순히 UTF8 형식의 표준을 따르지 않는 방법입니다. 정답은 Microsoft가 처음부터 인코딩에 능숙하지 않았기 때문에 Microsoft가 아닌 공개 사무소를 사용하는 것입니다.
제레미

49

이 해결 방법을 사용했습니다.

  1. CSV를 UTF-16 LE로 변환
  2. 파일 시작 부분에 BOM 삽입
  3. 필드 구분자로 탭 사용

1
감사! 이 스레드에서 다른 모든 답변을 시도했지만 UTF-8로 변환하면 작동하지 않았습니다. BOM으로 UTF-16을 시도하면 즉시 작동했습니다.
Husky

Mac 2011 용 Excel의 경우 UTF-16 little endian csv 파일로 성공했습니다
다중 동적

고마워,이 솔루션은 사용자에게 Excel에서 열 수있는 유니 코드 CSV를 제공하는 데 탁월합니다.
user1073075

21

PHP로 생성 된 CSV 파일과 동일한 문제가있었습니다. "sep=,\n"내용 시작 부분 (물론 BOM 이후)을 통해 구분 기호를 정의 할 때 Excel에서 BOM을 무시했습니다 .

따라서 "\xEF\xBB\xBF"내용의 시작 부분에 BOM ( )을 추가 하고 세미콜론을 구분 기호로 설정 fputcsv($fh, $data_array, ";");하면 트릭이 수행됩니다.


13

과거에도 같은 문제가있었습니다 (Excel에서 읽을 수 있고 다른 도구에서도 읽을 수있는 파일을 만드는 방법). CSV 대신 TSV를 사용하고 있지만 인코딩과 동일한 문제가 발생했습니다.

Excel에서 UTF-8을 자동으로 인식하는 방법을 찾지 못했으며 파일 소비자에게 파일을 여는 방법에 대한 복잡한 지침을 기꺼이 적용 할 수 없었습니다. 그래서 UTF-8 대신 UTF-16le (BOM 포함)로 인코딩했습니다. 크기는 두 배이지만 Excel은 인코딩을 인식 할 수 있습니다. 그리고 그들은 잘 압축되므로 크기는 거의 (그러나 슬프게도 결코) 중요하지 않습니다.


오래된 질문이지만 사람들이 여전히 대답 해 드리겠습니다. 감사합니다. :)
Lyubomyr Shaydariv

1
@LyubomyrShaydariv :이 질문에 답한 이후, 동료는 최신 BOM이 초기 BOM이있는 경우 UTF-8 CSV 파일을 식별한다고 말합니다. 따라서 몇 년 동안 전 세계의 모든 사람 (또는 파일을 제공하는 모든 사람)이 해당 Excel 버전 이상에있을 때 인코딩을 변경할 수 있습니다 :-)
Steve Jessop

이상해, 저에게는 효과가 없습니다. 문자를 중국어 기호로
바꿉니다

"UTF-16 BE with BOM"에 저장했을 때 Excel에 중국어 문자가있었습니다. "UTF-16 LE with BOM"을 시도했을 때 작동했습니다! Sublime Text를 테스트에 사용했습니다.
Henno

12

오래된 질문이지만 도대체 가장 간단한 해결책은 다음과 같습니다.

  1. 메모장에서 CSV 열기
  2. 다른 이름으로 저장-> 올바른 인코딩 선택
  3. 새 파일을여십시오

1
어떤 Excel 버전을 사용하십니까?
Lyubomyr Shaydariv

1
훌륭하고 간단하게 작동하고 문제를 해결합니다 (적어도 저에게는)
Auberon Vacher

1
문제는 Excel에서 .csv 파일을 csv 파일로 여는 것입니다. CSV 파일을 생성하는 프로세스가 있습니다. 그러면 사용자는 파일을 열면됩니다. 여기에서 그 이상을 수행해야합니다.
Veverke

2
@Veverke 정기적으로 파일을 생성하는 경우 이것이 최선의 해결책은 아닙니다. 그러나 일회성이라면이 대답은 완벽합니다. 메모장이 BOM을 UTF-8 또는 UTF-16 파일의 시작 부분에 배치하기 때문에 작동합니다.
Mark Ransom

매력처럼 작동합니다. ((:
user2925795

10

http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html에 게시 한대로 :

수정하려면 CSV 생성을 담당하는 소프트웨어 개발자에게 지시하십시오. 빠른 해결 방법으로 gsed를 사용하여 문자열의 시작 부분에 UTF-8 BOM을 삽입 할 수 있습니다.

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

이 명령은 UTF-4 BOM이 없으면 삽입합니다. 따라서 dem 등원 명령입니다. 이제 파일을 두 번 클릭하여 Excel에서 열 수 있습니다.


고마워요. 방금 csv ';'를 변환했습니다. 메모장 ++에서 UTF-BOM으로 분리되어 Excel이 올바르게 열립니다.
RandomGuy

정확히 무엇이 필요했습니다! 다음은 PHP에서 이것을 구현하는 방법에 대한 포인터입니다. stackoverflow.com/questions/25686191/…
EFC

이것은 CSV 파일에서 utf 문자를 인식 할 수없는 Excel의 해결 방법입니다. 따라서이 수정은 Excel 문제를 해결합니다.
cobp

이것은 쉼표 구분 기호와 함께 Excel 2007 그리스어 버전에서 작동했습니다. 감사합니다.
NameOfTheRose

fs.createWriteStream에서 "UTF-16LE '로 인코딩을 변경 (파일명 {코딩'UTF-16LE를 '}) 엑셀 올바르게 CSV 파일을 열
라훌 슈 클라

9

Notepad ++를 통해 BOM을 사용하여 .csv 파일을 UTF-8로 변환 할 수 있습니다.

  1. 메모장 에서 파일 열기 ++ .
  2. 메뉴로 이동 EncodingConvert to UTF-8 .
  3. 메뉴로 이동 FileSave .
  4. 메모장 ++을 닫습니다.
  5. Excel에서 파일을 엽니 다.

Windows 8.1의 Microsoft Office Professional Plus 2013에서 Microsoft Excel 2013 (15.0.5093.1000) MSO (15.0.5101.1000) 64 비트 (Windows 8.1의 유니 코드가 아닌 프로그램의 로캘이 "독일 (독일)")로 64 비트에서 작동했습니다.


1
당신이 말한 것은 전혀 작동하지 않았습니다. 변환 / 인코딩, 문자 세트 설정, 내 경우에는 아무것도 작동하지 않았습니다. 파일을 Google 시트로 가져오고 CSV로 다운로드하면 완벽하게 작동합니다. 2045
pakalbekim

1
인코딩-> Cinvert ti UTF-8-BOM Excel 버전 2016으로 변환해야했습니다.
Igor Vuković

4

UTF-8 텍스트 및 CSV 파일을 열기위한 간단한 VBA 매크로

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

원점 : = 65001은 UTF-8입니다. 쉼표 : 열로 배포 된 .csv 파일의 경우 True

항상 사용할 수 있도록 Personal.xlsb에 저장하십시오. 매크로 호출 버튼을 추가하여 Excel 도구 모음을 개인화하고 거기에서 파일을여십시오. 열 자동 맞춤, 맞춤 등과 같이 매크로에 더 많은 서식을 추가 할 수 있습니다.


2
감사. 불행히도 이것은 정말 고급 Excel 사용자를위한 제안이며, 내가이 목표로하는 것은 Excel이 자동으로 수행하도록하는 것입니다.
Lyubomyr Shaydariv 5

이 코드 스 니펫을 사용하려고했지만 작동하지 않습니다. Excel 2013을 사용합니다.
Sharunas Bielskis

3

나처럼이 스레드를 달성하는 Excel에서 파일을 여는 데 관심이있는 사용자를 돕기 위해.

아래 마법사를 사용했으며 UTF-8 파일을 가져 와서 잘 작동했습니다. 투명하지는 않지만 이미 파일이있는 경우 유용합니다.

  1. Microsoft Excel 2007을 엽니 다.
  2. 데이터 메뉴 모음 옵션을 클릭하십시오.
  3. From Text 아이콘을 클릭하십시오.
  4. 가져올 파일의 위치로 이동하십시오. 파일 이름을 클릭 한 다음 가져 오기 버튼을 클릭하십시오. 이제 텍스트 가져 오기 마법사-1 단계 또는 3 단계 창이 화면에 나타납니다.
  5. 데이터를 가장 잘 설명하는 파일 형식 (구분 또는 고정 너비)을 선택하십시오.
  6. File origin 옆에 나타나는 드롭 다운 목록에서 65001 : Unicode (UTF-8)를 선택하십시오.
  7. 다음 버튼을 클릭하여 텍스트 가져 오기 마법사-2 단계 또는 3 단계 창을 표시하십시오.
  8. Microsoft Excel 2007로 가져 오려는 파일에서 사용 된 구분 기호 옆에 확인 표시를합니다. 데이터 미리보기 창에는 선택한 구분 기호를 기준으로 데이터가 표시되는 방식이 표시됩니다.
  9. 다음 버튼을 클릭하여 텍스트 가져 오기 마법사-3 단계 중 3 단계를 표시하십시오.
  10. 가져 오려는 각 데이터 열에 적합한 데이터 형식을 선택하십시오. 원하는 경우 하나 이상의 데이터 열을 가져 오지 않는 옵션도 있습니다.
  11. 마침 버튼을 클릭하면 Microsoft Excel 2007로 데이터 가져 오기가 완료됩니다.

출처 : https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0


3

예, 가능합니다. 여러 사용자가 이전에 언급했듯이 파일이 UTF-8로 인코딩되면 올바른 바이트 순서 표시를 읽는 데 문제가있는 것으로 보입니다. UTF-16을 사용하면 문제가없는 것처럼 보이므로 UTF-8에 고유합니다. 이를 위해 사용하는 솔루션은 BOM TWICE를 추가하는 것입니다. 이를 위해 다음 sed 명령을 두 번 실행합니다.

sed -I '1s/^/\xef\xbb\xbf/' *.csv

와일드 카드를 파일 이름으로 바꿀 수 있습니다. 그러나 이로 인해 .csv 파일의 시작 부분에서 sep =가 변형됩니다. 그러면 .csv 파일이 정상적으로 Excel에서 열리지 만 첫 번째 셀에 "sep ="가있는 추가 행이 있습니다. "sep ="는 소스 .csv 자체에서도 제거 할 수 있지만 VBA로 파일을 열 때 구분 기호를 지정해야합니다.

Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)

형식 6은 .csv 형식입니다. 파일에 날짜가있는 경우 로컬을 true로 설정하십시오. Local이 true로 설정되지 않으면 날짜가 미국화되어 어떤 경우에는 .csv 형식이 손상됩니다.


1
sed 명령을 실행할 때 "sed : invalid
option-

2

이것은 내 작업 솔루션입니다.

vbFILEOPEN = "your_utf8_file.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

열쇠는 Origin : = 65001입니다


2

네 가능합니다. CSV를 생성하는 스트림을 작성할 때 가장 먼저해야 할 일은 다음과 같습니다.

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)

질문을 읽지 않았습니다! Lyubomyr Shaydariv는 다음과 같이 썼습니다. "UTF-8 BOM EF BB BF도 지정했지만 Excel은이를 무시합니다."
Elmue

이것은 작동 코드입니다. 이 리드를 사용하여 .Net 응용 프로그램에서 UTF-8 파일을 쓰면 Excel에서 파일을 UTF8로 인식합니다.
zax

Excel에있을 수 있습니다. 그러나 적어도 Excel 2007에서는 BOM이 완전히 무시됩니다. 따라서 모든 Excel 버전에서 작동하는 코드를 작성하려는 경우 코드가 유용하지 않습니다.
Elmue

2

정말 놀라운 답변 목록이지만 꽤 좋은 답변이 아직 없기 때문에 여기에 언급하겠습니다 .Google 시트로 CSV 파일 열기 로컬 컴퓨터에 Excel 파일로 다시 저장하십시오.

Microsoft와 달리 Google은 UTF-8 csv 파일을 지원하므로 파일을 열기 만하면됩니다. Excel 형식으로 내보내기도 가능합니다. 따라서 이것이 모두에게 선호되는 해결책은 아니지만, 특히 안전에 실패하고 클릭 수가 많을 수 있습니다. 특히 이미 Google에 로그인 한 경우 소리가 들릴 수 있습니다.


2

이것은 정확하게 질문을 다루지는 않지만 위의 해결책으로 인해 위의 해결책이 작동하지 않거나 충족시킬 수없는 요구 사항이 있기 때문에 vim에 액세스 할 때 BOM을 추가하는 또 다른 방법이 있습니다.

vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv

2

안녕하세요, CSV 생성을 위해 루비 온 레일을 사용하고 있습니다. 우리의 응용 프로그램에서 우리는 다국어 (I18n)를 갈 계획이며 우리는 Windows Excel의 CSV 파일에서 I18n 내용을 보는 동안 문제에 직면했습니다.

리눅스 (우분투)와 맥에서는 괜찮 았습니다.

실제 데이터를 보려면 Windows Excel에서 데이터를 다시 가져와야한다는 것을 확인했습니다. 가져 오는 동안 문자 세트를 선택할 수있는 더 많은 옵션이 제공됩니다.

그러나 이것은 모든 사용자에게 교육 할 수는 없으므로 우리가 찾고있는 솔루션은 더블 클릭으로 열 수 있습니다.

그런 다음 우리는 aghuddleston gist 의 도움으로 Windows에서 열린 모드와 bom으로 데이터를 표시하는 방법을 식별했습니다 . 참조로 추가되었습니다.

예제 I18n 내용

Mac 및 Linux에서

스웨덴어 : Förnamn English : 이름

Windows에서

스웨덴어 : 프리 남 영어 : 이름

def user_information_report(report_file_path, user_id)
    user = User.find(user_id)
    I18n.locale = user.current_lang
    open_mode = "w+:UTF-16LE:UTF-8"
    bom = "\xEF\xBB\xBF"
    body user, open_mode, bom
  end

def headers
    headers = [
        "ID", "SDN ID",
        I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
        I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
        I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
        I18n.t('sys_phone_number')
    ]
  end

def body tenant, open_mode, bom
    File.open(report_file_path, open_mode) do |f|
      csv_file = CSV.generate(col_sep: "\t") do |csv|
        csv << headers
        tenant.patients.find_each(batch_size: 10) do |patient|
          csv <<  [
              patient.id, patient.patientid,
              patient.first_name, patient.last_name, "#{patient.dob}",
              "#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
              "#{patient.city}", "#{patient.state}",  "#{patient.zip}",
              "#{patient.phone_number}"
          ]
        end
      end
      f.write bom
      f.write(csv_file)
    end
  end

여기서 주목해야 할 것은 열린 모드와 bom입니다

open_mode = "w + : UTF-16LE : UTF-8"

bom = "\ xEF \ xBB \ xBF"

CSV 삽입 BOM을 작성하기 전에

f. 봄 쓰기

f.write (csv_file)

윈도우와 맥

두 번 클릭하여 파일을 직접 열 수 있습니다.

리눅스 (우분투)

파일을 여는 동안 구분 기호 옵션을 요청하십시오-> "TAB"을 선택하십시오 여기에 이미지 설명을 입력하십시오


1

며칠 전에 같은 문제에 직면했으며 사용할 수 없기 때문에 해결책을 찾지 못했습니다. import from csv 모든 것을 문자열로 스타일링하기 때문에 기능을 습니다.

내 해결책은 먼저 notpad ++ 및로 파일을 여는 것이 었습니다 change the encode to ASCII. 그런 다음 Excel에서 파일을 열면 예상대로 작동합니다.


1

PHP에서는 $ bom을 $ csv_string 앞에 추가합니다.

$bom = sprintf( "%c%c%c", 239, 187, 191); // EF BB BF
file_put_contents( $file_name, $bom . $csv_string );

MS Excel 2016, PHP 7.2.4로 테스트


0

이것은 오래된 질문이지만 방금 마주 친 비슷한 문제가 있었고 해결책이 다른 사람들을 도울 수 있습니다.

CSV 텍스트 데이터를 파일에 쓰는 다음 Excel에서 결과 .csv를 열면 모든 텍스트가 단일 열로 이동하는 것과 동일한 문제가 발생했습니다. 위의 답변을 읽은 후 다음을 시도했는데 문제가 해결되었습니다.

StreamWriter를 만들 때 UTF-8 인코딩을 적용하십시오. 그게 다야.

예:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}

@elmue 조금 정교하게 관리? 올바른 인코딩으로 시작하여 CSV를 확실하게 출력하면 나중에 워크 플로에서 Excel과 호환성 문제가 발생하지 않습니까?
Rex

using () 문이 있으면 output.Close ()가 필요하지 않기 때문에 코드가 잘못되었습니다. Excel과는 별도로 CSV 인포 트는 매우 원시적입니다. 나는 그것을 전혀 사용하지 않을 것입니다. Excel에서 가져 오려면 HTML 테이블을 대신 사용하고 Excel에서 엽니 다.
Elmue

@Elmue를 명확히 해주셔서 감사합니다. 불행히도 필자는 닫기와 명시 적 으로 처리 가 필요한 여러 시나리오 (네트워크 드라이브의 파일 포함)를 실행했습니다 . 스택 Close()에서 호출을 본 것을 기억하는 이유를 찾지 Dispose못했지만 우리는 가고 있습니다. 제안한 비효율적 인 HTML 접근 방식이 필요하지 않기 때문에 CSV 가져 오기가 원시적이라는 진술도 틀 렸습니다. 실제로 일반 텍스트 데이터 가져 와서 HTML 변환 한 다음 Excel 가져 오는 추가 프로그래밍 단계를 만드는 것은 직관적이지 않습니다
Rex

계속 ... 그러나 시나리오마다 요구 사항이 다르며 제 예에서는 요청 된 OP로 인코딩을 지정하는 방법을 정확하게 보여줍니다.
Rex

원래 질문을 다시 읽어보십시오. "UTF-8 BOM EF BB BF도 지정했지만 Excel은이를 무시합니다." Excel에서 UTf8 BOM을 인식하지 못합니다. 시도 해봐! CSV 파일을 작성하고 그리스어 또는 러시아어 문자를 넣습니다. 그런 다음 Excel에서 열면 가비지가 발생합니다. 그래서 당신의 대답은 아무것도 해결하지 못합니다.
Elmue

0

완전히 자동으로 만들거나 한 번 클릭하거나 웹 페이지에서 Excel로 자동로드하지만 적절한 Excel 파일을 생성 할 수없는 경우 SYLK 형식을 대안으로 제안하는 것이 좋습니다. CSV만큼 간단하지는 않지만 텍스트 기반이며 구현하기가 쉽고 문제없이 UTF-8을 지원합니다.

데이터를 수신하고 파일을 클릭하여 Excel에서 직접 열리는 SYLK 파일을 출력하는 PHP 클래스를 작성했습니다 (또는 올바른 MIME 유형으로 파일을 웹 페이지에 쓰면 Excel을 자동 실행합니다). 서식을 추가하고 (예 : 굵은 체, 특정 형식의 숫자 등) 열의 텍스트로 열 크기를 변경하거나 자동 크기 열을 변경하십시오.

간단한 스프레드 시트를 만들고 SYLK로 저장 한 다음 텍스트 편집기로 읽음으로써 SYLK를 리버스 엔지니어링하기가 쉽지 않습니다. 첫 번째 블록은 인식 할 수있는 헤더 및 표준 숫자 형식 (만들면 모든 파일에서 역류)이며 데이터는 단순히 X / Y 좌표와 값입니다.


0
  1. LibreOffice Calc 다운로드 및 설치
  2. LibreOffice Calc에서 선택한 csv 파일을 엽니 다
  3. 텍스트 가져 오기 마법사가 나타나는 하늘에 감사드립니다.
  4. ... 구분 기호 및 문자 인코딩 옵션을 선택하십시오.
  5. 계산에서 결과 데이터를 선택하고 Excel로 붙여 넣기

0

간단한 C # 응용 프로그램에서 CSV 파일을 생성하고 동일한 문제가 발생했습니다. 내 해결책은 파일이 UTF8 인코딩으로 작성되도록하는 것입니다.

// Use UTF8 encoding so that Excel is ok with accents and such.
using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
{
    SaveCSV(writer);
}

원래 다음 코드가 있는데 메모장 ++에서는 악센트가 잘 보이지만 Excel에서는 엉망이되었습니다.

using (StreamWriter writer = new StreamWriter(path))
{
    SaveCSV(writer);
}

마일리지가 다를 수 있습니다. Office 365의 .NET 4 및 Excel을 사용하고 있습니다.


0

Office 365 용 작업 솔루션

  • 에 저장 UTF-16 (LE, BE 없음)
  • 분리기 사용 \t

PHP 코드

$header = ['číslo', 'vytvořeno', 'ěščřžýáíé'];
$fileName = 'excel365.csv';
$fp = fopen($fileName, 'w');
fputcsv($fp, $header, "\t");
fclose($fp);

$handle = fopen($fileName, "r");
$contents = fread($handle, filesize($fileName));
$contents = iconv('UTF-8', 'UTF-16', $contents);
fclose($handle);

$handle = fopen($fileName, "w");
fwrite($handle, $contents);
fclose($handle);

-1

먼저 Excel 스프레드 시트를 유니 코드 텍스트로 저장하십시오. Internet Explorer를 사용하여 TXT 파일을 열고 "다른 이름으로 저장"을 클릭하십시오. TXT 인코딩-적절한 인코딩을 선택하십시오 (예 : Win Cyrillic 1251)


-1

이 스레드에서 찾을 수있는 모든 것과 비슷한 것을 시도했지만 아무것도 완벽하게 작동하지 않았습니다. 그러나 Google 스프레드 시트로 가져 와서 단순히 CSV로 다운로드하면 매력처럼 작동했습니다. 당신이 내 좌절 지점에 오면 그것을 사용해보십시오.

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