OCI文字セット変換関数
OCI文字セット変換関数をリストし、説明します。
Oracle Database文字セットとUnicode (16ビット、固定幅のUnicodeエンコーディング)間の変換がサポートされています。UnicodeからOracle Database文字セットへの文字のマッピングが存在しない場合、置換文字が使用されます。したがって、変換して元の文字セットに戻す場合、データが失われる可能性があります。
表23-6に、OCI文字セット変換関数を示します。
表23-6 OCI文字セット変換関数
| 関数 | 用途 |
|---|---|
|
最後に起動された |
|
|
マルチバイト文字列をUnicodeに変換します。 |
|
|
文字列を別の文字セットに変換します。 |
|
|
Unicode文字列をマルチバイトに変換します。 |
OCICharSetConversionIsReplacementUsed()
最後に起動されたOCINlsCharSetConvert()またはOCICharSetToUnicode()で、変換不可の文字に対して置換文字が使用されたかどうかを示します。
用途
最後に起動されたOCICharSetToUnicode()またはOCINlsCharSetConvert()で、変換不可の文字に対して置換文字が使用されたかどうかを示します。
構文
boolean OCICharSetConversionIsReplacementUsed ( void *hndl );
コメント
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 );パラメータ
コメント
ソースの制限または宛先の制限に達すると、変換は終了します。Unicode文字列に変換された文字数が戻されます。dstlenが0の場合、関数は文字列をスキャンし、文字数を数え、文字数をrsizeに戻しますが、文字列を変換しません。
OCIEnvNlsCreate()関数のSQL CHARデータにOCI_UTF16IDが指定されている場合、エラーが発生します。
戻り値
OCI_SUCCESS、OCI_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 );パラメータ
コメント
ソースの制限または宛先の制限に達すると、変換は終了します。マルチバイト文字列に変換されたバイト数が戻されます。dstlenが0 (ゼロ)の場合、変換を実行せずに、バイト数がrsizeに戻されます。
OCI環境ハンドルまたはユーザー・セッション・ハンドルで指定された文字セットにUnicode文字が変換できない場合、置換文字が使用されます。この場合、OCICharSetConversionIsReplacementUsed()がTRUEを戻します。
OCIEnvNlsCreate()関数のSQL CHARデータにOCI_UTF16IDが指定されている場合、エラーが発生します。
戻り値
OCI_SUCCESS、OCI_INVALID_HANDLEまたはOCI_ERROR。