Goで文字コードを変換する

GoでUTF-8以外の文字コードを使うときは変換処理が必要になります。
日本語を使うときはencoding/japaneseパッケージを使います。
Shift-JIS, EUC-JP, ISO-2022-JPを変換できます。


パッケージのインストール

golang.org/x/text/encoding/japaneseからget出来ます。


go get -v golang.org/x/text/encoding/japanese

サンプルコード

コマンドライン引数にファイルと文字コードを指定して表示する。


package main
import (
    "bufio"
    "fmt"
    "io"
    "log"
    "os"

    "golang.org/x/text/encoding/japanese"
    "golang.org/x/text/transform"
)
func main() {
    if len(os.Args) < 3 {
        log.Fatal("引数が間違っています。")
    }
    file := os.Args[1]
    f, err := os.Open(file)
    if err != nil {
        log.Fatalf("ファイルをオープンできませんでした。[file:%s]", file)
    }
    defer f.Close()
    var reader io.Reader
    code := os.Args[2]
    //指定した文字コードに対応したデコーダを設定
    switch code {
    case "utf8":
        reader = f
    case "sjis":
        reader = transform.NewReader(f, japanese.ShiftJIS.NewDecoder())
    case "eucjp":
        reader = transform.NewReader(f, japanese.EUCJP.NewDecoder())
    case "iso2022jp":
        reader = transform.NewReader(f, japanese.ISO2022JP.NewDecoder())
    default:
        log.Fatalf("文字コードの指定が間違っています。[code:%s]", code)
    }
    buf := bufio.NewScanner(reader)
    //一行ずつ表示
    for buf.Scan() {
        fmt.Println(buf.Text())
    }
}

この記事へのコメント

最近のトラックバック