OCI文字セット変換関数

OCI文字セット変換関数をリストし、説明します。

Oracle Database文字セットとUnicode (16ビット、固定幅のUnicodeエンコーディング)間の変換がサポートされています。UnicodeからOracle Database文字セットへの文字のマッピングが存在しない場合、置換文字が使用されます。したがって、変換して元の文字セットに戻す場合、データが失われる可能性があります。

表23-6に、OCI文字セット変換関数を示します。

表23-6 OCI文字セット変換関数

関数 用途

OCICharSetConversionIsReplacementUsed()

最後に起動されたOCINlsCharSetConvert()またはOCICharSetToUnicode()で、変換不可の文字に対して置換文字が使用されたかどうかを示します。

OCICharSetToUnicode()

マルチバイト文字列をUnicodeに変換します。

OCINlsCharSetConvert()

文字列を別の文字セットに変換します。

OCIUnicodeToCharSet()

Unicode文字列をマルチバイトに変換します。

OCICharSetConversionIsReplacementUsed()

最後に起動されたOCINlsCharSetConvert()またはOCICharSetToUnicode()で、変換不可の文字に対して置換文字が使用されたかどうかを示します。

用途

最後に起動されたOCICharSetToUnicode()またはOCINlsCharSetConvert()で、変換不可の文字に対して置換文字が使用されたかどうかを示します。

構文

boolean OCICharSetConversionIsReplacementUsed ( void *hndl );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルへのポインタです。

コメント

Oracle Database文字セットとUnicode (16ビット、固定幅のUnicodeエンコーディング)間の変換がサポートされています。UnicodeからOracle Database文字セットへの文字のマッピングが存在しない場合、置換文字が使用されます。したがって、元の文字へのラウンドトリップ変換を実行できない文字も存在します。一部の文字ではデータが失われます。

戻り値

OCINlsCharSetConvert()またはOCICharSetToUnicode()が最後に起動された際、置換文字が使用されていればTRUEが戻されます。それ以外の場合は、FALSEが戻されます。

OCICharSetToUnicode()

マルチバイト文字列をUnicodeに変換します。

用途

srcが指し示すマルチバイト文字列をUnicodeに変換し、dstが指し示す配列に追加します。

構文

sword OCICharSetToUnicode ( void              *hndl, 
                            ub2               *dst, 
                            size_t             dstlen, 
                            const OraText     *src, 
                            size_t             srclen, 
                            size_t            *rsize );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルへのポインタです。

dst (OUT)

宛先バッファへのポインタです。

dstlen (IN)

文字で示した宛先バッファのサイズです。

src (IN)

マルチバイト・ソース文字列へのポインタです。

srclen (IN)

バイトで示したソース文字列のサイズです。

rsize (OUT)

変換された文字数。NULLポインタの場合、何も戻されません。

コメント

ソースの制限または宛先の制限に達すると、変換は終了します。Unicode文字列に変換された文字数が戻されます。dstlen0の場合、関数は文字列をスキャンし、文字数を数え、文字数をrsizeに戻しますが、文字列を変換しません。

OCIEnvNlsCreate()関数のSQL CHARデータにOCI_UTF16IDが指定されている場合、エラーが発生します。

戻り値

OCI_SUCCESSOCI_INVALID_HANDLEまたはOCI_ERROR

関連トピック

OCINlsCharSetConvert()

文字列を別の文字セットに変換します。

用途

srcが指し示すsrcidによって指定された文字セットの文字列を、dstidで指定された文字セットに変換し、dstが指し示す配列に追加します。ソースまたは宛先のデータ・サイズの制限に達すると、変換は終了します。宛先バッファに変換されたバイト数が戻されます。

構文

sword OCINlsCharSetConvert ( void          *hndl, 
                             OCIError      *errhp,
                             ub2            dstid, 
                             void          *dstp, 
                             size_t         dstlen,
                             ub2            srcid, 
                             const void    *srcp, 
                             size_t         srclen, 
                             size_t        *rsize );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルへのポインタです。

errhp (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errhpに記録され、NULLポインタが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

dstid (IN)

宛先バッファの文字セットIDです。

dstp (OUT)

宛先バッファへのポインタです。

dstlen (IN)

バイトで示した宛先バッファの最大サイズです。

srcid (IN)

ソース・バッファの文字セットIDです。

srcp (IN)

ソース・バッファへのポインタです。

srclen (IN)

バイトで示したソース・バッファの長さです。

rsize (OUT)

変換された文字数。ポインタがNULLの場合、何も戻されません。

コメント

ソースまたは宛先の文字セットIDをOCI_UTF16IDで指定できますが、元のデータおよび変換されたデータの長さは文字数ではなく、バイト数で示されます。NULLデータが出現しても、変換は停止しません。文字セット名から文字セットIDを取得するには、OCINlsCharSetNameToId()を使用してください。宛先バッファ内の導出されたデータに置換文字が含まれているかどうかを調べるには、OCICharSetConversionIsReplacementUsed()を使用してください。バッファは、文字セットに対して適切なバイト境界と位置が揃っている必要があります。たとえば、UTF-16の文字列を保持するには、ub2データ型が必要です。

戻り値

OCI_SUCCESSおよび変換されたバイト数、またはOCI_ERROR

OCIUnicodeToCharSet()

Unicode文字列をマルチバイト文字列に変換し、配列に追加します。

用途

Unicode文字列をマルチバイト文字列に変換し、配列に追加します。

構文

sword OCIUnicodeToCharSet ( void        *hndl, 
                            OraText     *dst, 
                            size_t       dstlen, 
                            const ub2   *src, 
                            size_t       srclen, 
                            size_t      *rsize );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルへのポインタです。

dst (OUT)

宛先バッファへのポインタです。

dstlen (IN)

バイトで示した宛先バッファの長さです。

src (IN)

Unicode文字列へのポインタです。

srclen (IN)

文字で示したソース文字列のサイズです。

rsize (OUT)

変換されたバイト数です。NULLポインタの場合、何も戻されません。

コメント

ソースの制限または宛先の制限に達すると、変換は終了します。マルチバイト文字列に変換されたバイト数が戻されます。dstlenが0 (ゼロ)の場合、変換を実行せずに、バイト数がrsizeに戻されます。

OCI環境ハンドルまたはユーザー・セッション・ハンドルで指定された文字セットにUnicode文字が変換できない場合、置換文字が使用されます。この場合、OCICharSetConversionIsReplacementUsed()TRUEを戻します。

OCIEnvNlsCreate()関数のSQL CHARデータにOCI_UTF16IDが指定されている場合、エラーが発生します。

戻り値

OCI_SUCCESSOCI_INVALID_HANDLEまたはOCI_ERROR