概要
csvファイルがutf8で書かれてなかったのでgoだけで出来ないか調べてみたメモ.
# iconvとかで元ファイルを前処理してから読めばそれでいい気もします・・・.
関連:
準備
以下のパッケージを利用しました.利用方法などはこちらを参照ください.
"code.google.com/p/go.text/encoding/japanese"
"code.google.com/p/go.text/transform"
サンプルコード
文字コードがeuc-jpの場合のサンプルです.sjisの場合は★のところを
japanese.ShiftJIS.NewDecoder()
に変更すれば対応できます.
文字コード変換をかませるだけなので,別にcsvの読み込みじゃなくても汎用的に利用できそうです.
package main
import (
"code.google.com/p/go.text/encoding/japanese"
"code.google.com/p/go.text/transform"
"encoding/csv"
"fmt"
"io"
"os"
)
func main() {
var fp *os.File
if len(os.Args) < 2 {
fp = os.Stdin
} else {
var err error
fp, err = os.Open(os.Args[1])
if err != nil {
panic(err)
}
defer fp.Close()
}
reader := csv.NewReader(transform.NewReader(fp, japanese.EUCJP.NewDecoder())) // ←★
for {
record, err := reader.Read()
if err == io.EOF {
break
} else if err != nil {
panic(err)
}
fmt.Println(record)
}
}