nkfによる文字コードの判定とGoでのShiftJISの扱い

linuxgolang

file --mime で文字コードを判定しようとしたら charset=unknown-8bit と表示されてしまったので、nkf --guess したところShift_JISであることが分かった。

$ file --mime unknown.txt
unknown.txt: text/plain; charset=unknown-8bit

$ brew install nkf
$ nkf --guess unknown.txt
Shift_JIS (CRLF) 

このファイルをGoで扱うにはjapanese packageでエンコード/デコードする。 ShiftJISのほかにEUCJPとISO2022JPをサポートしている。

import (
	"bytes"

	"golang.org/x/text/encoding/japanese"
	"golang.org/x/text/transform"
)

transform.NewReader(bytes.NewReader(b), japanese.ShiftJIS.NewDecoder())