Goで文字コードを手軽に変換するライブラリ作った

日本人である以上、いくらUTF-8が主権を得てきたといっても文字コード変換というカルマからは逃れられません。Pure Goでの文字コード変換はLLに比べるといろいろめんどくさい。

それに、そのままだと任意の文字コードを指定させるのが難しい。特定の文字コード決め打ちならいいんですけど、全世界の利用者に向けて任意の文字コード設定できるようにする場合とかはさらにめんどくさいし、かといって iconv に依存するのも嫌なのライブラリにしました。

以下のような感じで簡単に文字コードを変換できます。Pythonと同じで encode がUTF-8からUTF-8以外へ、 decode がUTF-8以外からUTF-8へ、です。内部では golang.org/x/net/html/charset を使っているので文字コードの指定もそれに習います。(WHATWGで定義されている名前になります) 。なので cp932 などではなく Windows-31J です。

 1b, err = EncodeString("こんにちわ", "Windows-31J")
 2b, err = Encode("こんにちわ", "Windows-31J")
 3b, err = EncodeBytes([]byte("こんにちわ"), "Windows-31J")
 4b, err = EncodeReader(strings.NewReader("こんにちわ"), "Windows-31J")
 5b = MustEncodeString("こんにちわ", "Windows-31J")
 6b = MustEncode("こんにちわ", "Windows-31J")
 7b = MustEncodeBytes([]byte("こんにちわ"), "Windows-31J")
 8b = MustEncodeReader(strings.NewReader("こんにちわ"), "Windows-31J")
 9
10s, err = DecodeString(string(source), "Windows-31J")
11s, err = Decode(source, "Windows-31J")
12s, err = DecodeBytes(source, "Windows-31J")
13s, err = DecodeReader(bytes.NewReader(source), "Windows-31J")
14s = MustDecodeString(string(source), "Windows-31J")
15s = MustDecode(source, "Windows-31J")
16s = MustDecodeBytes(source, "Windows-31J")
17s = MustDecodeReader(bytes.NewReader(source), "Windows-31J")
comments powered by Disqus