...

パッケージ mime

概要 ▾

mime パッケージは,MIME 仕様の一部を実装します。

定数

const (
    // BEncoding は, RFC 2045 で定義されている Base64 エンコード方式を表します。
    BEncoding = WordEncoder('b')
    // QEncoding は, RFC 2047 で定義されている Q エンコード方式を表します。
    QEncoding = WordEncoder('q')
)

変数

ErrInvalidMediaParameter は,メディア型の値が見つかったが,オプションパラメータの解析中にエラーが発生した場合,ParseMediaType によって返されます。

var ErrInvalidMediaParameter = errors.New("mime: invalid media parameter")

func AddExtensionType

func AddExtensionType(ext, typ string) error

AddExtensionType は,拡張子 ext に関連付けられている MIME 型を typ に設定します。 拡張子は, ".html" のように先頭にドットを付ける必要があります。

func ExtensionsByType 1.5

func ExtensionsByType(typ string) ([]string, error)

ExtensionsByType は, MIME 型 typ に関連付けられていることがわかっている拡張子を返します。 返される拡張子は, ".html" のように,それぞれ先頭のドットで始まります。 typ に拡張子が関連付けられていない場合, ExtensionsByType は nil スライスを返します。

func FormatMediaType

func FormatMediaType(t string, param map[string]string) string

FormatMediaType は,メディア型 t とパラメータ param を, RFC 2045 と RFC 2616 に準拠したメディア型としてシリアル化します。 型名とパラメータ名は小文字で表記されます。 いずれかの引数が標準違反になると, FormatMediaType は空の文字列を返します。

func ParseMediaType

func ParseMediaType(v string) (mediatype string, params map[string]string, err error)

ParseMediaType は, RFC 1521 に従って,メディア型の値とオプションのパラメータを解析します。 メディア型は, Content-Type ヘッダーと Content-Disposition ヘッダー (RFC 2183) の値です。 成功すると, ParseMediaType はメディア型を小文字に変換し,空白と nil 以外のマップを削除したものを返します。 オプションのパラメータの解析中にエラーが発生した場合は,メディア型がエラー ErrInvalidMediaParameter と共に返されます。 返されたマップ params は,小文字の属性から大文字と小文字の区別を付けて属性値にマップします。

func TypeByExtension

func TypeByExtension(ext string) string

TypeByExtension は,ファイル拡張子 ext に関連付けられている MIME 型を返します。 拡張子 ".html" のように,拡張子 ext は先頭のドットで始まる必要があります。 ext に関連付けられた型がない場合, TypeByExtension は "" を返します。

拡張子は最初に大文字と小文字を区別して検索され,次に大文字と小文字を区別しないで検索されます。

組み込みテーブルは小さいですが, unix では,ローカルシステムの mime.types ファイルによってこれらの名前の 1 つ以上の下で利用可能なら追加されます。

/etc/mime.types
/etc/apache2/mime.types
/etc/apache/mime.types

Windows では, MIME 型はレジストリから抽出されます。

テキスト型は,デフォルトで charset パラメータが "utf-8" に設定されています。

type WordDecoder 1.5

WordDecoder は RFC 2047 エンコードされた単語を含む MIME ヘッダーをデコードします。

type WordDecoder struct {
    // CharsetReader は, nil でない場合,charset から UTF-8 に変換する文字セット変換リーダーを生成する関数を定義します。
    // 文字セットは常に小文字です。
    // utf-8, iso-8859-1 および us-ascii の文字セットはデフォルトで処理されます。
    // CharsetReader の結果値の 1 つは, nil 以外でなければなりません。
    CharsetReader func(charset string, input io.Reader) (io.Reader, error)
}

func (*WordDecoder) Decode 1.5

func (d *WordDecoder) Decode(word string) (string, error)

Decode は, RFC 2047 エンコードされた単語をデコードします。

コード:

dec := new(mime.WordDecoder)
header, err := dec.Decode("=?utf-8?q?=C2=A1Hola,_se=C3=B1or!?=")
if err != nil {
    panic(err)
}
fmt.Println(header)

dec.CharsetReader = func(charset string, input io.Reader) (io.Reader, error) {
    switch charset {
    case "x-case":
        // 例のための偽の文字セット。
        // 実際の使用では, code.google.com/p/go-charset のようなパッケージと統合します。
        content, err := ioutil.ReadAll(input)
        if err != nil {
            return nil, err
        }
        return bytes.NewReader(bytes.ToUpper(content)), nil
    default:
        return nil, fmt.Errorf("unhandled charset %q", charset)
    }
}
header, err = dec.Decode("=?x-case?q?hello!?=")
if err != nil {
    panic(err)
}
fmt.Println(header)

出力:

¡Hola, señor!
HELLO!

func (*WordDecoder) DecodeHeader 1.5

func (d *WordDecoder) DecodeHeader(header string) (string, error)

DecodeHeader は,指定された文字列のすべてのエンコードされた単語をデコードします。 d の CharsetReader がエラーを返す場合に限り,エラーを返します。

コード:

dec := new(mime.WordDecoder)
header, err := dec.DecodeHeader("=?utf-8?q?=C3=89ric?= <eric@example.org>, =?utf-8?q?Ana=C3=AFs?= <anais@example.org>")
if err != nil {
    panic(err)
}
fmt.Println(header)

header, err = dec.DecodeHeader("=?utf-8?q?=C2=A1Hola,?= =?utf-8?q?_se=C3=B1or!?=")
if err != nil {
    panic(err)
}
fmt.Println(header)

dec.CharsetReader = func(charset string, input io.Reader) (io.Reader, error) {
    switch charset {
    case "x-case":
        // 例のための偽の文字セット。
        // 実際の使用では, code.google.com/p/go-charset のようなパッケージと統合します。
        content, err := ioutil.ReadAll(input)
        if err != nil {
            return nil, err
        }
        return bytes.NewReader(bytes.ToUpper(content)), nil
    default:
        return nil, fmt.Errorf("unhandled charset %q", charset)
    }
}
header, err = dec.DecodeHeader("=?x-case?q?hello_?= =?x-case?q?world!?=")
if err != nil {
    panic(err)
}
fmt.Println(header)

出力:

Éric <eric@example.org>, Anaïs <anais@example.org>
¡Hola, señor!
HELLO WORLD!

type WordEncoder 1.5

WordEncoder は, RFC 2047 の符号化ワードエンコーダです。

type WordEncoder byte

func (WordEncoder) Encode 1.5

func (e WordEncoder) Encode(charset, s string) string

Encode は,エンコードされた単語形式の s を返します。 s が特殊文字を含まない ASCII の場合は,変更されずに返されます。 charset は s の IANA 文字セット名です。 大文字と小文字は区別されません。

コード:

fmt.Println(mime.QEncoding.Encode("utf-8", "¡Hola, señor!"))
fmt.Println(mime.QEncoding.Encode("utf-8", "Hello!"))
fmt.Println(mime.BEncoding.Encode("UTF-8", "¡Hola, señor!"))
fmt.Println(mime.QEncoding.Encode("ISO-8859-1", "Caf\xE9"))

出力:

=?utf-8?q?=C2=A1Hola,_se=C3=B1or!?=
Hello!
=?UTF-8?b?wqFIb2xhLCBzZcOxb3Ih?=
=?ISO-8859-1?q?Caf=E9?=

サブディレクトリ

名前 概要
..
multipart multipart パッケージは,RFC 2046 で定義された MIME マルチパートのパースを実装します。
quotedprintable quotedprintable パッケージは,RFC 2045 で定義された quoted-printable エンコードを実装します。