変換結果の出力フォーマットを設定します。

構文

int CONV_OutputMode(
  int mode
);

パラメータ

mode
[in] 変換結果の出力モードを指定します。
説明
CONV_OUTPUT_MODE_DEFAULT NULで終端する文字列で変換結果を出力します。(デフォルト)
CONV_OUTPUT_MODE_COMPOSITE ローカル文字コードの文字列とUTF-8の文字列の両方を含むコンポジット形式で変換結果を出力します。
CURRENT_MODE 現在の設定値を返します。

戻り値

 現在の出力モードの設定値を返します。

解説

 本関数で設定を行うことにより次の関数の出力フォーマットを変更します。

 CP1252ライブラリの次の関数の出力フォーマットも変更します。

 本関数でCONV_OUTPUT_MODE_DEFAULTを設定したとき(デフォルトの形式)の出力フォーマットは下図のとおりです。

変換結果の文字列 NUL

 本関数でCONV_OUTPUT_MODE_COMPOSITEを設定したとき(コンポジット形式)の出力フォーマットは下図のとおりです。

変換前の文字列と変換結果の文字列が異なる場合:
ローカル文字コードの文字列 NUL UTF-8の文字列 NUL
変換結果の文字列が変換前の文字列と同じだった場合:
文字列 NUL NUL

 コンポジット形式の出力では、変換関数の種類によらず、常にローカル文字コードの文字列、UTF-8の文字列の順に出力されます。 また、変換関数のoutput_lengthに出力される値は、変換先の文字コードの文字列のバイト数を返すことに注意してください。

(例1)CONV_SjisToUtf8String関数でSJISの"あい"を変換したときの出力
SJISの"あい" NUL UTF-8の"あい" NUL
←      output_length      →

(例2)CONV_Utf8ToSjisString関数でUTF-8の"あい"を変換したときの出力
SJISの"あい" NUL UTF-8の"あい" NUL
←      output_length      →

(例3)CONV_SjisToUtf8String関数でSJISの"123"を変換したときの出力
"123" NUL NUL
←      output_length      →

必要条件

ヘッダファイル:
CodeConversion.h (Ver. 1.1.1以降)
ライブラリファイル:
libCodeConversion.a (Ver. 1.1.1以降)
libSTARTUPOPH5000.a

サンプル

#include <stdio.h>
#include "lib.h"
#include "CodeConversion.h"

// Get UTF-8 string from composite string buffer.
static char *getUtf8(char *buf)
{
    char *rp = buf;
    while(*rp++){ // skip the 1st string.
        ;
    }
    if (*rp){
        return rp;  // Return 2nd string if exists.
    }else{
        return buf; // Return 1st string otherwise.
    }
}

void main(void)
{
    size_t output_length;

    char *src = "あい";

    printf("src=[%s]\n\n", src);

    // Save current output mode
    int original_mode = CONV_OutputMode(CURRENT_MODE);
    // Set CONV_OUTPUT_MODE_COMPOSITE
    CONV_OutputMode(CONV_OUTPUT_MODE_COMPOSITE);

    printf("SJIS->UTF-8\n");
    char *output1 = CONV_SjisToUtf8String(src, -1, NULL, &output_length);
    char *utf1 = getUtf8(output1);

    printf(" SJIS     =[%s]\n", output1);
    printf(" UTF-8    =[%s]\n", utf1);
    printf(" length   =%d\n\n", (int)output_length); // = 6

    printf("UTF-8->SJIS\n");
    char *output2 = CONV_Utf8ToSjisString(utf1, -1, NULL, &output_length);
    char *utf2 = getUtf8(output2);

    printf(" SJIS     =[%s]\n", output2);
    printf(" UTF-8    =[%s]\n", utf2);
    printf(" length   =%d\n", (int)output_length); // = 4

    // Restore output mode
    CONV_OutputMode(original_mode);

    free(output1);
    free(output2);
    while(1)
    {
        Idle();
    }
}

最終更新日:2022/04/08