LoginSignup
1
0

More than 3 years have passed since last update.

[Go]文字コードのUTF-8変換を行う - charset decode

Posted at

実現したい機能

Shift-JIS EUC-JP ISO-2022-JP等の文字コードであるstringをGo内部で扱えるよう UTF-8 にデコードする。

実装

文字コードが既に分かっている場合の変換は以下の手順で実現できる。

  • 入力stringのcharsetに応じたdecoderを取得
  • decoderを用いてstringをUTF-8にdecode
package main

import (
    "errors"
    "fmt"
    "golang.org/x/net/html/charset"
    "golang.org/x/text/transform"
)

// Converts the specified charset to UTF-8.
func Decode(src []byte, charSet string) (string, error) {
    e, _ := charset.Lookup(charSet)
    if e == nil {
        return string(src), errors.New(fmt.Sprintf("invalid charset [%s]", charSet))
    }
    decodeStr, _, err := transform.Bytes(
        e.NewDecoder(),
        src,
    )
    if err != nil {
        return string(src), err
    }
    return string(decodeStr), nil
}

使い方

func TestDecode(t *testing.T) {
    t.Run("SJIS -> UTF-8", func(t *testing.T) {
        src := <SJIS byte slice>
        // encodingの指定は"sjis"や"Shift_JIS"でも可
        decoded, err := Decode(src, "shift_jis")
        fmt.Println(decoded)
    })
}

その他

今回のソースコードは以下に置いておきます。
https://github.com/tomtwinkle/go-encoding-decoder

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0