Go言語 - Shift_JISファイルの読み書き
Windowsでの使用ではSJISのテキストを扱うことが多くなります。SJISファイルの読み書きには以下のパッケージを使用します。
入手先
・https://github.com/golang/text
参考サイトとパッケージのパス?が違うので注意。
旧 "code.google.com/p/go.text/encoding/japanese" "code.google.com/p/go.text/transform" 新 "golang.org/x/text/encoding/japanese" "golang.org/x/text/transform"
サンプル
package main import ( "golang.org/x/text/encoding/japanese" "golang.org/x/text/transform" "bufio" "fmt" // "io" "os" ) func main() { var fp *os.File var err error // var byteBuf []byte // var tooLong bool // // Shift_JISファイルを読み込み // fp, err = os.Open("SJIS.txt") if err != nil { panic(err) } // defer fp.Close() sjisScanner := bufio.NewScanner(transform.NewReader(fp, japanese.ShiftJIS.NewDecoder())) // 1行ずつ処理 for sjisScanner.Scan() { fmt.Println(sjisScanner.Text()) // コマンドプロンプトにはShift_JISに自動でエンコードされる } // sjisReader := bufio.NewReader(transform.NewReader(fp, japanese.ShiftJIS.NewDecoder())) // 1行ずつ処理 // for { // byteBuf, tooLong, err := sjisReader.ReadLine() // if err == io.EOF { // break // } else if err != nil { // panic(err) // } // if tooLong { // panic("***Line is too Long!!***") // } // str := string(byteBuf) // fmt.Println(str) // コマンドプロンプトにはShift_JISに自動でエンコードされる // } fp.Close() // // Shift_JISでファイルに書き込み // fp, err = os.OpenFile("SJIS2.txt", os.O_CREATE|os.O_WRONLY, 0666) if err != nil { panic(err) } defer fp.Close() sjisWriter := bufio.NewWriter(transform.NewWriter(fp, japanese.ShiftJIS.NewEncoder())) // 以下エラー処理省略 _, err = sjisWriter.WriteString("SJIJライトデータ1行目\n") _, err = sjisWriter.WriteString("SJIJライトデータ2行目\n") err = sjisWriter.Flush() // fp.Close() }