codeconv - 文字コードの変換 ------------------------------------------------------------------------------ CharSet typedef enum { } CharSet; 各種文字コードを表す enum 型です。 ------------------------------------------------------------------------------ typedef gchar *(*CodeConvFunc) (const gchar *inbuf, gint *error); inbuf に入力された文字列を変換し、新たな領域を確保して出力する関数の型です。 ------------------------------------------------------------------------------ CodeConverter struct _CodeConverter { CodeConvFunc code_conv_func; gchar *src_encoding; gchar *dest_encoding; }; 文字コード変換をオブジェクト指向的に行うためのインタフェースを提供します。 ------------------------------------------------------------------------------ CharSet conv_guess_ja_encoding (const gchar *str); 与えられた文字列から日本語の文字コードを判定します。判定結果は CharSet 型の enum で返されます。 str: 日本語の文字列 戻り値: 判定された文字コード C_US_ASCII : ASCII 文字列 C_ISO_2022_JP: ISO-2022-JP 文字列 C_EUC_JP : EUC-JP 文字列 C_SHIFT_JIS : Shift_JIS 文字列 C_UTF_8 : UTF-8 文字列 C_AUTO : 不明 ------------------------------------------------------------------------------ gchar *conv_utf8todisp (const gchar *inbuf, gint *error); 文字列 inbuf が正しい UTF-8 文字列かどうかを判定し、 UTF-8 の場合は 先頭に BOM が付加されている場合はそれを除去し、新たにメモリを確保して 返します。正しい UTF-8 でない場合はすべての 8-bit コードを代替文字に 置換して返します。 返った文字列は g_free() で解放する必要があります。 inbuf: 入力文字列 error: NULL でない場合、エラーでなければ 0、エラーの場合は0以外がセットされる 戻り値: 変換後の文字列 ------------------------------------------------------------------------------ gchar *conv_localetodisp (const gchar *inbuf, gint *error); ロケール文字列 inbuf を UTF-8 に変換して返します。 返った文字列は g_free() で解放する必要があります。 inbuf: 入力文字列 error: NULL でない場合、エラーでなければ 0、エラーの場合は0以外がセットされる 戻り値: 変換後の文字列 ------------------------------------------------------------------------------ CodeConverter *conv_code_converter_new (const gchar *src_encoding, const gchar *dest_encoding); 文字コード変換のための CodeCoverter オブジェクトを作成します。 返ったオブジェクトは conv_code_converter_destroy() で解放する必要があります。 src_encoding: 変換元エンコーディング dest_encoding: 変換先エンコーディング 戻り値: CodeConverter オブジェクト ------------------------------------------------------------------------------ void conv_code_converter_destroy (CodeConverter *conv); CodeCoverter オブジェクトを破棄します。 conv: CodeConverter オブジェクト ------------------------------------------------------------------------------ gchar *conv_convert (CodeConverter *conv, const gchar *inbuf); CodeCoverter オブジェクトを用いて文字コードを変換します。 可能な場合は自前の文字コード変換ルーチンを使用します。それ以外は iconv() を用いて変換します。 返った文字列は g_free() で解放する必要があります。 conv: CodeConverter オブジェクト inbuf: 入力文字列 戻り値: 変換後の文字列 ------------------------------------------------------------------------------ #define conv_codeset_strdup(inbuf, src_code, dest_code) conv_codeset_strdup_full() を簡略化したインタフェースです。 ------------------------------------------------------------------------------ gchar *conv_codeset_strdup_full (const gchar *inbuf, const gchar *src_encoding, const gchar *dest_encoding, gint *error); 文字列 inbuf を変換元エンコーディング src_encoding から変換先エンコーディング dest_encoding に変換して返します。可能な場合は自前の文字コード変換ルーチンを 使用します。それ以外は iconv() を用いて変換します。 返った文字列は g_free() で解放する必要があります。 inbuf: 入力文字列 src_encoding: 変換元エンコーディング dest_encoding: 変換先エンコーディング error: NULL でない場合、エラーでなければ 0、エラーの場合は0以外がセットされる 戻り値: 変換後の文字列 ------------------------------------------------------------------------------ CodeConvFunc conv_get_code_conv_func (const gchar *src_encoding, const gchar *dest_encoding); 変換元エンコーディング src_encoding と変換先エンコーディング dest_encoding から、自前の文字コード変換ルーチンの関数ポインタを返します。 利用できるものがなければ単に文字列を複製するだけの関数(conv_noconv)を返します。 src_encoding: 変換元エンコーディング dest_encoding: 変換先エンコーディング 戻り値: CodeConvFunc 型の文字列変換関数へのポインタ ------------------------------------------------------------------------------ gchar *conv_iconv_strdup (const gchar *inbuf, const gchar *src_encoding, const gchar *dest_encoding, gint *error); 文字列 inbuf を iconv() を用いて変換元エンコーディング src_encoding から 変換先エンコーディング dest_encoding に変換して返します。 返った文字列は g_free() で解放する必要があります。 inbuf: 入力文字列 src_encoding: 変換元エンコーディング dest_encoding: 変換先エンコーディング error: NULL でない場合、エラーでなければ 0、エラーの場合は0以外がセットされる 戻り値: 変換後の文字列 ------------------------------------------------------------------------------ gchar *conv_iconv_strdup_with_cd (const gchar *inbuf, iconv_t cd, gint *error); 文字列 inbuf を iconv_open() が返した変換ディスクリプタ cd を用いて、 iconv() で変換して返します。 返った文字列は g_free() で解放する必要があります。 inbuf: 入力文字列 cd: iconv_open() が返した変換ディスクリプタ error: NULL でない場合、エラーでなければ 0、エラーの場合は0以外がセットされる 戻り値: 変換後の文字列 ------------------------------------------------------------------------------ const gchar *conv_get_charset_str (CharSet charset); charset: CharSet 型の enum から文字コードを表す文字列定数を取得します。 charset: CharSet 型の enum 戻り値: charset に対応する文字列定数 ------------------------------------------------------------------------------ CharSet conv_get_charset_from_str (const gchar *charset); 文字コードを表す文字列 charset から CharSet 型の enum を取得します。 charset: 文字列 戻り値: charset に対応する CharSet 型の enum ------------------------------------------------------------------------------ CharSet conv_get_locale_charset (void); ロケールのエンコーディングを CharSet 型の enum で取得します。 戻り値: ロケールのエンコーディング(CharSet 型の enum) ------------------------------------------------------------------------------ const gchar *conv_get_locale_charset_str (void); ロケールのエンコーディングを文字列定数で取得します。 戻り値: ロケールのエンコーディングを表す文字列定数 ------------------------------------------------------------------------------ CharSet conv_get_internal_charset (void); LibSylph 内部で使用しているエンコーディングを CharSet 型の enum で取得します。 常に C_UTF_8 が返されます。 戻り値: 内部エンコーディング(CharSet 型の enum) ------------------------------------------------------------------------------ const gchar *conv_get_internal_charset_str (void); LibSylph 内部で使用しているエンコーディングを文字列定数で取得します。 常に CS_UTF_8 ("UTF-8") が返されます。 戻り値: 内部エンコーディングを表す文字列定数 ------------------------------------------------------------------------------ CharSet conv_get_outgoing_charset (void); 現在のロケールエンコーディングに対応するメール送信用のエンコーディングを 内部のテーブルから調べ、 CharSet 型の enum として返します。 例えば、ロケールエンコーディングが "ja_JP.EUC-JP"、"ja_JP.UTF-8" 等の場合は C_ISO_2022_JP が返ります。 戻り値: 送信用エンコーディング(CharSet 型の enum) ------------------------------------------------------------------------------ const gchar *conv_get_outgoing_charset_str (void); 現在のロケールエンコーディングに対応するメール送信用のエンコーディングを 内部のテーブルから調べ、文字列定数として返します。 戻り値: 送信用エンコーディングを表す文字列定数 ------------------------------------------------------------------------------ gboolean conv_is_multibyte_encoding (CharSet encoding); encoding がマルチバイトのエンコーディングである場合に、 TRUE を返します。 encoding: CharSet 型の enum 戻り値: encoding がマルチバイトのエンコーディングの場合 TRUE そうでない場合 FALSE ------------------------------------------------------------------------------ const gchar *conv_get_current_locale (void); 現在のロケールエンコーディングを文字列で返します。 文字列は LibSylph 内部で保持しているため、解放してはいけません。 戻り値: 現在のロケールエンコーディングを表す文字列 ------------------------------------------------------------------------------ gboolean conv_is_ja_locale (void); 現在のロケールエンコーディングが日本語ロケールであった場合、 TRUE を返します。 戻り値: 現在のロケールエンコーディングが日本語ロケールの場合 TRUE そうでない場合 FALSE ------------------------------------------------------------------------------ gchar *conv_unmime_header (const gchar *str, const gchar *default_encoding); MIME エンコードされた文字列 str をデコードし、 UTF-8 文字列にして返します。 default_encoding が指定されている場合、 str をそのエンコーディングとみなして UTF-8 に変換してから MIME デコードを行います。 また、 default_encoding が指定されておらず、 str に8ビットコードが含まれて いる場合は、日本語ロケールの場合は日本語文字コードから UTF-8 への自動変換、 それ以外のロケールの場合はロケールエンコーディングから UTF-8 への変換を 行います。その後 MIME デコードを行います。 デコードした文字列は新たなメモリ領域に確保され、返されます。 使用後は g_free() で解放する必要があります。 str: MIME エンコードされた文字列 default_encoding: str のデフォルトのエンコーディング(NULL 可) 戻り値: デコードした文字列 ------------------------------------------------------------------------------ void conv_encode_header (gchar *dest, gint len, const gchar *src, gint header_len, gboolean addr_field, const gchar *out_encoding); UTF-8 文字列 src を MIME エンコードして dest に格納します。 header_len には MIME エンコード文字列の前にあるヘッダの文字列長を指定します (1行が76文字を超えないようにするため)。 addr_field が TRUE の場合は、ヘッダをアドレスフィールドとみなして、 括弧などをエンコード文字列に含まない例外処理を行います。 out_encoding には出力する MIME エンコード済み文字列のエンコーディングを 指定します。 dest: MIME エンコード済み文字列を格納するバッファ len: dest のサイズ src: UTF-8 文字列 header_len: ヘッダ文字列長 addr_field: ヘッダがアドレスフィールドの場合 TRUE そうでない場合 FALSE out_encoding: 出力エンコーディング ------------------------------------------------------------------------------ gchar *conv_encode_filename (const gchar *src, const gchar *param_name, const gchar *out_encoding); ファイル名または任意のパラメータを RFC 2231 で規定されているファイル名 エンコーディングでエンコードします。 エンコードした文字列は新たなメモリ領域に確保され、返されます。 使用後は g_free() で解放する必要があります。 src: パラメータの値となる UTF-8 文字列 param_name: パラメータ名 out_encoding: 出力エンコーディング ------------------------------------------------------------------------------ gint conv_copy_file (const gchar *src, const gchar *dest, const gchar *src_encoding); ファイル src のエンコーディングを src_encoding から UTF-8 に変換し、 dest にコピーします。 src: 変換元ファイルのパス(ファイル名エンコーディング) dest: 変換先ファイルのパス(ファイル名エンコーディング) src_encoding: src のエンコーディング 戻り値: 成功した場合 0 エラーの場合 -1 ------------------------------------------------------------------------------ gint conv_copy_dir (const gchar *src, const gchar *dest, const gchar *src_encoding); ディレクトリ src 直下のファイルをすべてディレクトリ dest 以下にコピーします。 その際ファイルのエンコーディングを src_encoding から UTF-8 に変換します。 dest が存在しない場合は自動的に作成します。 src: 変換元ディレクトリのパス(ファイル名エンコーディング) dest: 変換先ディレクトリのパス(ファイル名エンコーディング) src_encoding: src 以下のファイルのエンコーディング 戻り値: 成功した場合 0 エラーの場合 -1 ------------------------------------------------------------------------------ CharSet conv_check_file_encoding (const gchar *file); ファイル file のエンコーディングを調べ、 CharSet 型の enum で返します。 判別できるのは UTF-8 またはロケールエンコーディングのみです。 file: ファイルのパス(ファイル名エンコーディング) 戻り値: file のエンコーディング(CharSet 型の enum) C_UTF_8: file は UTF-8 ロケールエンコーディングに対応する値: file はロケールエンコーディング C_AUTO: 不明 ------------------------------------------------------------------------------ gchar *conv_filename_from_utf8 (const gchar *utf8_file); UTF-8 文字列 utf8_file をファイル名エンコーディングに変換して返します。 変換でエラーが発生した場合は、警告メッセージを出して元の文字列をそのまま コピーして返します。エラーを適切に処理したい場合は GLib の g_filename_from_utf8() を使用してください。 変換した文字列は新たなメモリ領域に確保され、返されます。 使用後は g_free() で解放する必要があります。 utf8_file: UTF-8 文字列 戻り値: ファイル名エンコーディング文字列 ------------------------------------------------------------------------------ gchar *conv_filename_to_utf8 (const gchar *fs_file); ファイル名エンコーディング文字列 fs_file を UTF-8 に変換して返します。 変換でエラーが発生した場合は、警告メッセージを出して元の文字列をそのまま コピーして返します。エラーを適切に処理したい場合は GLib の g_filename_to_utf8() を使用してください。 変換した文字列は新たなメモリ領域に確保され、返されます。 使用後は g_free() で解放する必要があります。 fs_file: ファイル名エンコーディング文字列 戻り値: UTF-8 文字列