UTF-8の文字列をカスタムコード(独自コード)の文字列に変換します。

構文

char *CONV_Utf8ToLocalString(
  char *src,
  int length,
  int *error_code,
  size_t *output_length,
  CONV_UNICODE_TO_LOCAL UnicodeToLocalCallback
);

パラメータ

src
[in] UTF-8の文字列を指すポインタ。
length
[in] 変換するバイト数を指定します。負の値を指定すると、srcが指す文字列がNULで終端するまでの範囲を変換します。
error_code
[out] エラーコードを返す変数を指すポインタ。エラーコードが不要のときはNULLを指定します。
output_length
[out] 変換結果の終端のNULを除いたバイト数を返す変数を指すポインタ。バイト数が不要のときはNULLを指定します。
UnicodeToLocalCallback
[in] Unicodeをカスタムコードに変換するコールバック関数を指すポインタ。

戻り値

 変換が成功したら変換結果を格納したバッファを指すポインタを、それ以外はNULLを返します。

解説

 UTF-8の文字列を、アプリケーションプログラムで独自に定義した文字コード(カスタムコード)の文字列に変換するときは本関数を使用します。

 srcが指すUTF-8の文字列の先頭からlengthで指定した長さの文字列をUnicodeToLocalCallbackで指定されたコールバック関数で変換し、変換結果を格納したバッファを指すポインタを返します。

 lengthに負の値を指定すると、srcが指す文字列がNULで終端するまでの範囲を変換します。

 srcが指す文字列がlengthで指定した長さに到達する前にNULが検出されたときは、NULまでの文字列を変換します。

 srcが指す文字列にコールバック関数でカスタムコード(独自コード)に変換できないUnicodeが含まれていたら、その文字を'?'に置き換えて変換を継続します。この場合は、error_codeが指す変数に次のエラーコードを返します。
エラーコード説明
CONV_UNSUPPORTED_CODE_WARNING変換できない文字コードが含まれていた。

 変換が成功したら、変換結果の文字列の最後をNULで終端し、変換結果のNULを除いたバイト数をoutput_lengthが指す変数に返します。

 変換が失敗したときはNULLを返し、error_codeが指す変数に次のエラーコードを返します。
エラーコード説明
CONV_INVALID_PARAMETER_ERRORパラメーターエラー
CONV_MEMORY_ALLOCATION_ERRORメモリーアロケーションエラー
CONV_INVALID_UTF8_FORMAT_ERRORUTF-8の規格に合致しないバイト列を検出した。

 本関数がNULL以外の値を返したときは、free関数でバッファを解放する必要があります。


 UnicodeToLocalCallbackで指定したコールバック関数でUnicodeをカスタムコードに変換します。コールバック関数のインターフェースは次のとおりです。

構文

typedef char * (*CONV_UNICODE_TO_LOCAL)(
  unsigned short unicode
);

パラメータ

unicode
[in] Unicode

戻り値

 変換が成功したら結果の文字コードを格納したバッファを指すポインタを、それ以外はNULLを返します。

解説

 unicodeで指定したUnicodeをカスタムコードの文字コードに変換します。

 変換した結果が1バイトのコードならば、2バイトのバッファの1バイト目にこれを格納し、2バイト目にはNULをセットしてこのバッファを指すポインタを返します。
2バイトのバッファ:
+0 1バイトコード
+1 NUL

 変換した結果が2バイトのコードならば、2バイトのバッファの1バイト目に第1バイトを、2バイト目に第2バイトを格納してこのバッファを指すポインタを返します。
2バイトのバッファ:
+0 2バイトコードの第1バイト
+1 2バイトコードの第2バイト

 指定されたUnicodeに対応する文字コードが存在しない場合はNULLを返します。

 このコールバック関数のインターフェースは次の関数と互換性があります。
CONV_UnicodeToCP437ose関数
CONV_UnicodeToSjis関数

必要条件

ヘッダファイル:
CodeConversion.h
ライブラリファイル:
libCodeConversion.a
libSTARTUPOPH5000.a

サンプル

サンプル
// Callback function
char *MyUnicodeToCP437(unsigned short unicode)
{
    static char buf[2];

    if (unicode == 0x00A2){
        // '¢' -> 0x9B
        buf[0] = 0x9B;
        buf[1] = 0;
        return buf;
    }else if (unicode == 0x00A5){
        // '¥' -> 0x9D
        buf[0] = 0x9D;
        buf[1] = 0;
        return buf;
    }else{
        //  Use CONV_UnicodeToCP437ose() for the other code.
        return CONV_UnicodeToCP437ose(unicode);
    }
}

// Customized conversion
char *My_Utf8ToCP437String(char *src, int length, int *error_code, size_t *output_length)
{
    char *ret =  CONV_Utf8ToLocalString(src, length, error_code, output_length, MyUnicodeToCP437);
    return ret;
}

関連事項

最終更新日:2021/08/02