programing

엑셀이 UTF-8 CSV 파일을 자동으로 인식하도록 강제할 수 있습니까?

kakaobank 2023. 4. 27. 22:39
반응형

엑셀이 UTF-8 CSV 파일을 자동으로 인식하도록 강제할 수 있습니까?

저는 일부 데이터를 CSV 파일로 내보내는 애플리케이션의 일부를 개발하고 있습니다.응용프로그램은 모든 수준에서 다국어 특성 때문에 항상 UTF-8을 사용합니다. 이러한 예 분음 문자, 그리스 "Excel" "CSV" "(" "" "" ", "" "" "" "" "" "" "" "" "" "" "" ""와 같은 결과를 .Г„/Г¤, Г–/Г¶ CSV UTF-8로 BOM, Excel, , UTF-8, UTF-8, UTF-8을 지정해 보았습니다. UTF-8 BOM도 지정해 보았습니다.EF BB BF하지만 엑셀은 그것을 무시합니다.

해결 방법이 있습니까?

추신: Excel처럼 작동할 수 있는 도구는 무엇입니까?


갱신하다

제가 질문의 공식화와 공동체를 혼동했다고 말해야겠습니다.제가 이 질문을 할 때, 저는 UTF-8 CSV 파일을 사용자에게 문제 없이 유창하고 투명하게 열 수 있는 방법을 요청했습니다.하지만 자동으로 해달라는 잘못된 공식을 사용했습니다.이는 매우 혼란스럽고 VBA 매크로 자동화와 충돌합니다.제가 가장 감사하게 생각하는 두 가지 질문에 대한 답이 있습니다. 첫 번째 답변은 알렉스 https://stackoverflow.com/a/6002338/166589, 의 것이고, 두 번째 답변은 조금 후에 나온 마크 https://stackoverflow.com/a/6488070/166589 의 것입니다.사용성 측면에서 엑셀은 사용자 친화적인 UTF-8 CSV 지원이 부족한 것 같아서 두 가지 모두 정답이라고 생각하고, 엑셀은 투명하게 그렇게 할 수 없다고 명시되어 있었기 때문에 알렉스의 답변을 먼저 수락했습니다.이것이 제가 여기서 자동으로 혼동한 것입니다.Mark의 답변은 더 복잡한 고급 사용자가 기대한 결과를 얻을 수 있는 방법을 촉진합니다.두 대답 모두 훌륭하지만, 알렉스의 대답은 명확하게 명시되지 않은 제 질문에 조금 더 잘 맞습니다.


업데이트 2

마지막 편집 후 5개월이 지난 후, 저는 알렉스의 답변이 어떤 이유에서인지 사라졌다는 것을 알게 되었습니다.기술적인 문제가 아니었으면 좋겠고 지금은 어떤 답변이 더 큰지에 대한 논의가 없었으면 좋겠습니다.그래서 저는 마크의 답변을 가장 좋은 답변으로 받아들이고 있습니다.

Alex가 맞지만 csv로 내보내야 하므로 csv 파일을 열 때 다음과 같은 조언을 사용자에게 제공할 수 있습니다.

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

이렇게 하면 특수 문자가 올바르게 표시됩니다.

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

NET의 UTF8에서 하지 않습니다.GetBytes()BOM을 출력하려면 스트림(또는 해결 방법)을 사용해야 합니다.

BOM이 무시된 버그는 Excel 2013에서 수정된 것 같습니다.같은 , 문자를 하면 BOM 문자가 추가됩니다.\uFEFF도움이 되었습니다.

이렇게 많은 답이 있지만 아무도 답을 하지 않는 것은 놀라운 일입니다.

"제가 이 질문을 할 때, 저는 사용자에게 문제 없이 UTF-8 CSV 파일을 Excel에서 열 수 있는 방법을 요청했습니다."

200개 이상의 사전 투표로 승인된 답변으로 표시된 답변은 사용자에게 Excel 구성 방법을 매뉴얼로 제공하고 싶지 않기 때문에 저에게 유용하지 않습니다.이와 별도로 이 설명서는 한 Excel 버전에 적용되지만 다른 Excel 버전에는 다른 메뉴 및 구성 대화 상자가 있습니다.각 Excel 버전에 대한 설명서가 필요합니다.

그렇다면 문제는 엑셀이 어떻게 UTF8 데이터를 간단한 더블 클릭으로 보여주느냐는 것입니다.

적어도 Excel 2007에서는 UTF8 BOM이 무시되고 가비지만 표시되기 때문에 CSV 파일을 사용하는 경우에는 불가능합니다.이것은 이미 류보미르 샤이다리브의 질문의 일부입니다.

"나도 UTF-8 BOMEF BBF를 지정하려고 했지만, 엑셀은 그것을 무시합니다."

저도 같은 경험을 합니다.BOM을 사용하여 UTF8 CSV 파일에 러시아 또는 그리스 데이터를 쓰면 Excel에서 가비지가 발생합니다.

UTF8 CSV 파일의 내용:

Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ

Excel 2007 결과:

CSV UTF8 Excel

해결책은 CSV를 전혀 사용하지 않는 것입니다.이 형식은 Microsoft에서 너무 멍청하게 구현되어 쉼표 또는 세미콜론을 구분 기호로 사용할 경우 제어판의 영역 설정에 따라 달라집니다.따라서 한 컴퓨터에서는 동일한 CSV 파일이 올바르게 열릴 수 있지만 다른 컴퓨터에서는 그렇지 않을 수 있습니다."CSV"는 "쉼표로 구분된 값"을 의미하지만, 예를 들어 독일 Windows에서는 쉼표가 작동하지 않는 동안 기본적으로 세미콜론을 구분자로 사용해야 합니다. (여기서 SSV = 세미콜론으로 구분된 값) CSV 파일은 다른 언어 버전의 Windows 간에 교환할 수 없습니다.이것은 UTF-8 문제에 대한 추가적인 문제입니다.

엑셀은 수십 년 전부터 존재했습니다.Microsoft가 CSV Import와 같은 기본적인 기능을 오랫동안 구현하지 못한 것은 유감스러운 일입니다.


그러나 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 Excel

이 경우 테이블 자체에만 검은색 테두리와 선이 있습니다.모든 셀에 격자선을 표시하려면 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를 UTF-16 LE로 변환
  2. 파일 시작 부분에 BOM 삽입
  3. 탭을 필드 구분 기호로 사용

PHP 생성 CSV 파일에서도 동일한 문제가 발생했습니다.Excel에서 할 때 했습니다."sep=,\n"내용의 시작 부분(물론 BOM 이후).

BOMBOM)을 추가하는 것."\xEF\xBB\xBF") fputcsv($fh, $data_array, ";");요령을 터득합니다.

메모장++을 통해 .csv 파일을 BOM과 함께 UTF-8로 변환할 수 있습니다.

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

윈도우즈 8.1에서 Microsoft Office Professional Plus 2013의 Microsoft Excel 2013(15.0.5093.1000) MSO(15.0.5101.1000) 64비트에서 Unicode가 아닌 프로그램의 로케일을 "독일(독일)"로 설정하여 작업했습니다.

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

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

저는 과거에도 같은 문제(Excel이 읽을 수 있는 파일과 다른 도구도 읽을 수 있는 파일을 생성하는 방법)를 가지고 있었습니다.CSV가 아닌 TSV를 사용하고 있었는데 인코딩과 같은 문제가 발생했습니다.

저는 엑셀로 하여금 UTF-8을 자동으로 인식하게 하는 방법을 찾지 못했고, 파일을 여는 복잡한 지침을 소비자들에게 적용할 의사가 없었습니다.그래서 UTF-8 대신 UTF-16le(BOM 포함)로 인코딩했습니다.두 배 크기지만 엑셀은 인코딩을 인식할 수 있습니다.압축이 잘 되기 때문에 크기가 중요한 경우는 거의 없습니다.

제가 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이 없는 경우 삽입합니다.따라서 이 명령은 동일한 명령입니다.이제 파일을 두 번 클릭하여 Excel에서 열 수 있습니다.

php에서는 $csv_string에 $bom을 추가하기만 하면 됩니다.

$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로 테스트됨

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입니다.

개인 정보에 저장합니다.xlsb를 항상 사용할 수 있도록 설정합니다.매크로 호출 단추를 추가하여 Excel 도구 모음을 개인 설정하고 거기서 파일을 엽니다.열 자동 맞춤, 정렬 등과 같은 형식을 매크로에 추가할 수 있습니다.

단지 나처럼 이 스레드를 달성하는 엑셀에서 파일을 여는 데 관심이 있는 사용자들을 돕기 위해서입니다.

나는 아래의 마법사를 사용해 보았는데 UTF-8 파일을 가져오는 것이 나에게 잘 작동했습니다.투명하지는 않지만 파일이 이미 있는 경우 유용합니다.

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

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

정말 놀라운 답변 목록입니다. 하지만 여전히 좋은 답변이 하나 없기 때문에 여기서 언급하겠습니다. 구글 시트로 csv 파일을 열고 로컬 컴퓨터에 엑셀 파일로 다시 저장하는 것입니다.

Microsoft와 달리 Google은 UTF-8 csv 파일을 지원하므로 파일을 열기만 하면 됩니다.Excel 형식으로 내보내기도 작동합니다.따라서 이 솔루션이 모두에게 선호되는 솔루션은 아닐 수도 있지만, 매우 안전하고 클릭 수가 소리처럼 많지 않습니다. 특히 Google에 이미 로그인한 경우에는 더욱 그렇습니다.

이것이 제 작업 솔루션입니다.

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

키는 오리진입니다.=65001

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

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

네, 가능합니다.앞서 여러 사용자가 지적한 바와 같이, 파일이 UTF-8로 인코딩될 때 엑셀이 정확한 바이트 순서 표시를 읽는 데 문제가 있는 것 같습니다. UTF-16에서는 문제가 없는 것으로 보여 UTF-8 고유의 문제입니다.제가 사용하는 솔루션은 BOM, 트와이스를 추가하는 것입니다.이를 위해 다음 sed 명령을 두 번 실행합니다.

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

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

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

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

이는 문제를 정확하게 해결하지는 못했지만 우연히 이 문제를 발견했고 위의 솔루션이 저에게 적합하지 않거나 요구 사항을 충족할 수 없었기 때문에 vim에 액세스할 수 있을 때 BOM을 추가하는 다른 방법이 있습니다.

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

안녕하세요, 저는 CSV 생성을 위해 레일에 루비를 사용하고 있습니다.애플리케이션에서 우리는 다중 언어(I18n)를 사용할 계획이며 윈도우 엑셀의 CSV 파일에서 I18n 콘텐츠를 보는 동안 문제가 발생했습니다.

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

우리는 실제 데이터를 보기 위해 윈도우 엑셀을 다시 데이터를 가져와야 하는 것을 확인했습니다.가져오는 동안 문자 집합을 선택할 수 있는 더 많은 옵션이 표시됩니다.

그러나 모든 사용자를 대상으로 교육할 수는 없으므로 두 번 클릭만으로 여는 것이 해결책입니다.

그런 다음 guddle stonist의 도움을 받아 오픈 모드 및 bomin window excel로 데이터를 보여주는 방법을 확인했습니다.참조에 추가되었습니다.

예제 I18n 내용

Mac 및 Linux에서

스웨덴어: Förnn 영어: 이름

Windows에서

스웨덴어: Fãrnn 영어: 이름

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

여기서 주의해야 할 중요한 사항은 개방 모드와 폭탄입니다.

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

bom = "\xEF\xBB\xBF"

CSV를 작성하기 전에 BOM을 삽입

f.쓰기 폭탄

f.write(csv_file)

Windows 및 Mac

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

리눅스(우분투)

파일을 여는 동안 구분자 옵션을 요청합니다. -> "탭"을 선택합니다.

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

저는 며칠 전에 같은 문제에 직면했고, 사용할 수 없어서 해결책을 찾을 수 없었습니다.import from csv모든 항목을 문자열로 스타일링할 수 있도록 하기 때문입니다.

의 해결책은 notpad 제해notpad++로 이었습니다.change the encode to ASCII그리고 엑셀로 파일을 열어보니 예상대로 작동했습니다.

사무실 365를 위한 작업 솔루션

  • 에축에 UTF-16LE, 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);

ASP에 대한 솔루션을 찾았습니다.POM을 사용하여 CSV를 UTF8로 다운로드하는 NET Core:

byte[] csvBytes = Encoding.Default.GetBytes(csvString);
UTF8Encoding utf8 = new UTF8Encoding(true);
byte[] bom = utf8.GetPreamble();
var result = bom.Concat(csvBytes).ToArray();
return new FileContentResult(result, MediaTypeHeaderValue.Parse("text/csv; charset=utf-8"));

Excel은 UTF8보다 다운로드된 CSV 파일을 인식합니다.

이는 오래된 질문이지만 방금 전에도 비슷한 문제가 발생했으며 솔루션이 다른 사용자에게 도움이 될 수 있습니다.

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

StreamWriter를 만들 때 UTF-8 인코딩을 적용합니다.바로 그겁니다.

예:

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

만약 당신이 그것을 완전히 자동으로 만들기를 원클릭하거나 웹 페이지에서 엑셀로 자동으로 로드하기를 원하지만 적절한 엑셀 파일을 생성할 수 없다면, 나는 대안으로 SLK 형식을 보는 것을 제안합니다.좋습니다. CSV만큼 간단하지는 않지만 텍스트 기반이며 구현이 매우 쉬우며 UTF-8을 문제 없이 지원합니다.

저는 데이터를 수신하고 파일을 클릭하기만 하면 바로 엑셀에서 열리는 (또는 올바른 마임 유형으로 웹 페이지에 파일을 작성하면 엑셀이 자동으로 실행되는) SylK 파일을 출력하는 PHP 클래스를 작성했습니다.형식 지정(굵은 글씨, 특정 방식의 형식 번호 등)을 추가하거나 열 크기를 변경하거나 열 크기를 자동으로 조정할 수도 있습니다. 모든 코드는 약 100줄 이하입니다.

단순한 스프레드시트를 만들어 SYLK로 저장한 다음 텍스트 편집기로 읽음으로써 SYLK를 역엔지니어링하는 것은 매우 쉽습니다.첫 번째 블록은 머리글 및 표준 번호 형식으로, 생성한 모든 파일에서 반복적으로 인식한 다음 데이터는 X/Y 좌표와 값입니다.

저는 간단한 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);
}

저는 원래 다음 코드를 가지고 있었는데, 노트패드++에서는 악센트가 문제가 되지 않았습니다.

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

마일리지가 다를 수 있습니다. - 저는 사용하고 있습니다.오피스 365의 NET 4와 엑셀.

저는 이 스레드에서 찾을 수 있는 모든 것을 시도했고, 이와 유사하지만 완전히 작동하는 것은 없었습니다.하지만 구글 시트로 가져와서 csv로 다운로드하는 것이 매력적으로 작용했습니다.저의 좌절감에 오면 한번 해보세요.

2022년 3월입니다. BOM과 sep=를 모두 사용할 수는 없는 것 같습니다.line. sep=\t 등을 추가하면 Excel은 BOM을 무시하게 됩니다.

세미콜론을 사용하는 것이 Excel이 이해하는 기본 사항인 것 같습니다. 이 경우 sep=를 건너뛸 수 있습니다.라인으로 하면 됩니다.

이것은 Excel 버전 2110 빌드 14527.20276을 사용하는 Microsoft 365입니다.

CSV 파일 작업을 보다 쉽게 할 수 있는 포괄적인 기능을 공유하는 것뿐입니다.이 주제와 관련하여 마지막 함수 인수를 기록하십시오.

function array2csv($data, $file = '', $download = true, $mode = 'w+', $delimiter = ',', $enclosure = '"', $escape_char = "\\", $addUnicodeBom = false)
{
    $return = false;

    if ($file == '') {
        $f = fopen('php://memory', 'r+');
    } else {
        $f = fopen($file, $mode);
    }

    if ($addUnicodeBom) {
        $utf8_with_bom = chr(239) . chr(187) . chr(191);
        fwrite($f, $utf8_with_bom);
    }


    foreach ($data as $line => $item) {

        fputcsv($f, $item, $delimiter, $enclosure, $escape_char);
    }

    rewind($f);

    if ($download == true) {
        $return = stream_get_contents($f);
    } else {
        $return = true;
    }

    return $return;
}

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

언급URL : https://stackoverflow.com/questions/6002256/is-it-possible-to-force-excel-recognize-utf-8-csv-files-automatically

반응형