オンラインブック「Goを使用したネットワークプログラミング」(CC BY-NC-SA 3.0 )には、文字セット(文字セットとエンコーディングの管理)に関する章があり、JanNewmarchが1つの文字セットから別の文字セットへの変換について詳しく説明しています。しかし、それは面倒なようです。
これは、ライブラリgo-charset(Roger Peppeから)を使用した解決策です(もっと簡単なものを見逃したかもしれません)。文字列をエンコードされ
た文字列に変換して、DOSウィンドウで印刷できるようにします。utf-8
ibm850
éèïöîôùòèìë
翻訳機能の詳細を以下に示します。
package main
import (
"bytes"
"code.google.com/p/go-charset/charset"
_ "code.google.com/p/go-charset/data"
"fmt"
"io"
"log"
"strings"
)
func translate(tr charset.Translator, in string) (string, error) {
var buf bytes.Buffer
r := charset.NewTranslatingReader(strings.NewReader(in), tr)
_, err := io.Copy(&buf, r)
if err != nil {
return "", err
}
return string(buf.Bytes()), nil
}
func Utf2dos(in string) string {
dosCharset := "ibm850"
cs := charset.Info(dosCharset)
if cs == nil {
log.Fatal("no info found for %q", dosCharset)
}
fromtr, err := charset.TranslatorTo(dosCharset)
if err != nil {
log.Fatal("error making translator from %q: %v", dosCharset, err)
}
out, err := translate(fromtr, in)
if err != nil {
log.Fatal("error translating from %q: %v", dosCharset, err)
}
return out
}
func main() {
test := "éèïöîôùòèìë"
fmt.Println("utf-8:\n", test)
fmt.Println("ibm850:\n", Utf2dos(test))
}