Main Page   Modules   Data Structures   Globals   Appendix  

構造体 MConverter
[コード変換]

コード変換に用いられる構造体. [詳細]


変数

int lenient
int last_block
unsigned at_most
int nchars
int nbytes
enum MConversionResult result
union {
   void *   ptr
   double   dbl
   char   c [256]
status
void * internal_info


説明

コード変換に用いられる構造体.

コード変換に用いられる構造体。最初の3つのメンバは変換を制御する。


構造体

厳密な変換が必要でない場合に値を 0 以外にする。 デフォルトでは、変換は厳密である。

変換が厳密とは、デコードの際には最初の不正なバイトでコンバータが止まること、 エンコードの際には変換されるコード系でサポートされない最初の文字でコンバータが止まることを指す。 これらの場合、MConverter->result はそれぞれ MCONVERSION_RESULT_INVALID_BYTEMCONVERSION_RESULT_INVALID_CHAR となる。

変換が厳密でない場合には、デコードの際の不正なバイトはそのバイトのまま残る。 またエンコードの際には、不正な文字が Unicode 文字の場合には "<U+XXXX>" に、そうでない場合には "<M+XXXXXX>" に置き換えられる。

バイト列の終端のブロックをデコードする際、または文字列の終端のブロックをエンコードする際は、値を 0 以外にする。この値は以下のように変換に影響する。

デコーディングの際に最後の数バイトが正しいバイトシークエンスを形成するには短すぎる場合:

値が 0 でなければ、変換はそのシークエンスの最初のバイトにおいて、エラー (MCONVERSION_RESULT_INVALID_BYTE) で終る。

値が 0 ならば、変換は成功して終る。 問題の数バイトはキャリーオーバとしてコンバータに保持され、変換の続きを行う際に変換するバイト列の前に付けられる。

エンコーディングの際にコード系が文脈依存の場合、

値が 0 でなければ、コンテキストを最初に戻すためのバイト列がソースの文字とかかわりなく変換の結果生成されることがある。

値が 0 ならば、そのようなバイト列は生成されない。

0 でなければ、変換される最大の文字数を指定する。

以下の3つのメンバは変換の結果を表すためのものである。

最近にデコード/エンコードされた文字数。

最近にデコード/エンコードされたバイト数。

コード変換の結果を示すコード。

このメンバは内部的に使用され、アプリケーションプログラムは触れてはならない。


このページの先頭

Main Page   Modules   Data Structures   Globals   Appendix  

mulemark