Skip to content

Instantly share code, notes, and snippets.

@hayajo
Created April 1, 2014 10:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hayajo/9911524 to your computer and use it in GitHub Desktop.
Save hayajo/9911524 to your computer and use it in GitHub Desktop.
Goで文字列のエンコード/デコードのサンプル
package main
import (
"bytes"
"fmt"
"io/ioutil"
"code.google.com/p/go.text/encoding"
"code.google.com/p/go.text/encoding/japanese"
"code.google.com/p/go.text/transform"
)
func Encode(encname string, b []byte) ([]byte, error) {
enc, err := enc(encname)
if err != nil {
return nil, err
}
r := bytes.NewBuffer(b)
encoded, err := ioutil.ReadAll(transform.NewReader(r, enc.NewEncoder()))
return encoded, err
}
func Decode(encname string, b []byte) ([]byte, error) {
enc, err := enc(encname)
if err != nil {
return nil, err
}
r := bytes.NewBuffer(b)
decoded, err := ioutil.ReadAll(transform.NewReader(r, enc.NewDecoder()))
return decoded, err
}
func enc(encname string) (enc encoding.Encoding, err error) {
switch encname {
case "ShiftJIS":
enc = japanese.ShiftJIS
case "EUCJP":
enc = japanese.EUCJP
case "ISO2022JP":
enc = japanese.ISO2022JP
default:
err = fmt.Errorf("Unknown encname %s", encname)
}
return
}
func main() {
b := []byte("ほげふがぴよ")
encname := "ShiftJIS"
sjis, _ := Encode(encname, b)
if sjis != nil && !bytes.Equal(sjis, b) {
fmt.Println("encoded")
}
utf8, _ := Decode(encname, sjis)
if utf8 != nil && bytes.Equal(utf8, b) {
fmt.Println("decoded")
}
}
@hayajo
Copy link
Author

hayajo commented Apr 1, 2014

こんなかんじ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment