ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

Unicode (UTF-16) 文字コードを Shift_JIS に変換する

バージョン 4.0.3 以降

SFXTextEncoding::UTF16BEToShiftJIS() 関数または
SFXTextEncoding::UTF16LEToShiftJIS() 関数を利用することができます。

SFXWideString utf16str(abc);  // 変換したい UTF-16 文字列
SFXAnsiString shiftJISstr;

SFXTextEncoding::UTF16LEToShiftJIS(utf16str, &shiftJISstr);

バージョン 4.0.3 以前

Unicode (UTF-16) 文字コードを Shift_JIS に変換するには、KDDI 拡張の
SFBKDDIUnicodeSJIS::Unicode16toSjis 関数を使用します。

SFXWideString utf16str(abc);  // 変換したい UTF-16 文字列
SFXAnsiString shiftJISstr;

SFBKDDIUnicodeSJISSmp jis = SFBKDDIUnicodeSJIS::NewInstance();
if (jis != null) {
    shiftJISstr.SetLength(utf16str.GetLengthCString() * 2);

    // Unicode16をShift-JISに変換する
    if (jis->Unicode16toSjis(&utf16str, &shiftJISstr)) {
        ACharPtr p1 = shiftJISstr.GetBuffer();
        ACharPtr p2 = p1;
        SIntN i;
        for (i = 0; i < utf16str.GetLengthCString() * 2; ++i) {
            if (*p1 != '\0') {
                *p2 = *p1;
                ++p2;
            }
            ++p1;
        }
        *p2 = '\0';
        shiftJISstr = shiftJISstr.Truncate(); // 末尾切り捨て
        // 変換成功
        // 変換後の文字列は shiftJISstr に
    }
}

参照 SFBKDDIUnicodeSJIS::NewInstance | SFBKDDIUnicodeSJIS::Unicode16toSjis |
SFXAnsiString::SetLength | SFXAnsiString::Truncate