【Go, golang】 Microsoft Excel에서도 Numbers에서도 csv 파일을 문자화하지 않도록 작성한다.

6582 단어 5CSV

전치



Go에서 csv를 다루는 기사는 Qiita에서도 여러가지 있습니다만, 반 자신의 메모 대신이라고 하는 것으로.
Microsoft Excel에서도 Numbers에서도 csv 파일을 열 때 깨지지 않는 파일을 만들어 출력하도록 합니다.
샘플은 비교적 본 적도 있는 것이라고 생각합니다.

환경



go version: 1.11.4
os: MacOS

샘플 코드


package main

import (
       "encoding/csv"
       "os"
       "log"
       "bufio"
)

func main() {
        // ファイルがあれば開く、なければ新しく作成するようにしています。
        file, err := os.OpenFile("new_company.csv", os.O_RDWR|os.O_CREATE, 0755)
        if err != nil {
                log.Fatal(err)
        }

        // Excelでも見れるようにするには、BOM付きUTF8にする必要があるので、fileの先頭にBOMを付与。
        bw := bufio.NewWriter(file)
        bw.Write([]byte{0xEF, 0xBB, 0xBF})

        // csvデータ
        records := [][]string{
                {"id", "name", "address"},
                {"1", "Softbank", "日本のどこか"},
                {"2", "au", "多分日本のどこか"},
                {"3", "Docomo", "おそらく日本のどこか"},
        }

        w := csv.NewWriter(bw)
        // w.Writeで1行づつやってもいいですが、一括でデータを取り込みできるので、今回はWriteAllにしました。
        // 必要に応じて使ってください。なお、WriteAllの場合、w.Flush()をしなくて良いのでわずかですがコード短縮になる(...?)
        w.WriteAll(records)

        if err := w.Error(); err != nil {
           log.Fatal(err)
        }

        // 最後にfileを閉じます。
        if err := file.Close(); err != nil {
                log.Fatal(err)
        }
}

개인 포인트



bufio를 사용하여 BOM 부여



htps : // 이 m / t bq - 어 - rs / ms / 03 27 예 b6f46b580525

htps : // 핀조ぉ. 기주 b. 이오/2017/03/29/우 tf8-csv ぃ th-보 m 온-고 g. HTML
참고로 시도해 보았습니다.

역시 csv 데이터가 되는 데이터 앞에 BOM을 부여하는 곳일까요?

어떤 느낌이 들었는가



위의 샘플 코드에서 go run main.go 파일을 생성 한 후,
less 명령으로 내용을 보면,
<U+FEFF>id,name,address
1,Softbank,日本のどこか
2,au,多分日本のどこか
3,Docomo,おそらく日本のどこか
new_company.csv (END)

와 같이, 선두에 BOM이 붙어 있는 것을 알 수 있습니다 (cat 커멘드라고 붙어 있는지 모른다).

Cot Editor에서 파일을 열면 ...

엔코팅의 곳이 「Unicode(UTF-8) B…

Mac의 Microsoft Excel에서 열어 보면 먼저 텍스트 파일 마법사 창이 표시되지만,
구분자의 취급 등을 선택하고 「완료」를 누르면,

이런 느낌으로 볼 수 있습니다. ...좋았다.

좋은 웹페이지 즐겨찾기