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

BREW C++ プログラミング 逆引きコード集 : 文字コード

C++ で作成されたBREW アプリで、Shift_JIS や UTF-8 などの文字コードを扱う方法です。
SophiaFramework を用いています。

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

バージョン 4.0.3 以降

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

SFXAnsiString shiftJISstr("abc");  // 変換したい Shift JIS 文字列
SFXWideString utf16str;

SFXTextEncoding::ShiftJISToUTF16LE(shiftJISstr, &utf16str);

バージョン 4.0.3 以前

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

SFXAnsiString shiftJISstr("abc");  // 変換したい Shift JIS 文字列
SFXWideString utf16str;

SFBKDDIUnicodeSJISSmp jis = SFBKDDIUnicodeSJIS::NewInstance();
if (jis != null) {
    utf16str.SetLength(shiftJISstr.GetLengthCString() * 2);
    
    // Shift-JISをUnicodeに変換する
    if (jis->SjistoUnicode16(&shiftJISstr, &utf16str)) { 
        // 変換成功

        utf16str = utf16str.Truncate(); // 末尾切り捨て
        // 変換後の文字列は utf16str に
    }
}

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

      

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

      

UTF-16 文字コードを UTF-8 に変換する

バージョン 4.0.3 以降

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

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

SFXTextEncoding::UTF16LEToUTF8(utf16str, &utf8str);

バージョン 4.0.3 以前

UTF-16 文字コードを UTF-8 に変換するには、SFXHelper::wstrtoutf8 関数を使用します。

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

// あらかじめ領域を確保
utf8str.SetLength(utf16str.GetLengthCString() * 2);

// UTF-16をUTF-8に変換するSFのヘルパー関数
if (SFXHelper::wstrtoutf8(
    utf16str.GetCString(), utf16str.GetLengthCString(),
    utf8str.GetBuffer(), utf8str.GetLength())) {
    
    // 成功した場合
    
    utf8str = utf8str.Truncate(); // 末尾切り捨て
    // 変換完了
}

参照 SFXHelper::wstrtoutf8 | SFXAnsiString::SetLength

      

UTF-8 文字コードを UTF-16 に変換する

バージョン 4.0.3 以降

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

SFXAnsiString utf8str("abc");  // 変換したい UTF-8 文字列
SFXWideString utf16str;

SFXTextEncoding::UTF8ToUTF16LE(utf8str, &utf16str);

バージョン 4.0.3 以前

UTF-8 文字コードを UTF-16 に変換するには、SFXHelper::utf8towstr 関数を使用します。

SFXAnsiString utf8str("abc");  // 変換したい UTF-8 文字列
SFXWideString utf16str;

// あらかじめ領域を確保
utf16str.SetLength(utf8str.GetLengthCString());

// UTF-8をUTF-16に変換するSFのヘルパー関数
if (SFXHelper::utf8towstr(
    utf8str.GetCString(), utf8str.GetLengthCString(),
    utf16str.GetBuffer(), utf16str.GetLength() * 2)) {
    
    // 成功した場合
    
    utf16str = utf16str.Truncate(); // 末尾切り捨て
    // 変換完了
}

参照 SFXHelper::utf8towstr | SFXAnsiString::SetLength

      

JIS 文字コードを Shift JIS に変換する

バージョン 4.0 以降

SFXMailUtility::JISToShiftJIS() 関数を利用することができます。

SFXAnsiString src("あいうえお");  // 変換したい文字列(JIS 文字コード)
SFXAnsiString result;

SFXMailUtility::JISToShiftJIS(src, &result);

バージョン 3.0

JIS 文字コードを Shift JIS に変換するには、SFUMailUtil::JisToSJis 関数を使用します。

SFXAnsiString src("あいうえお");  // 変換したい文字列(JIS 文字コード)
UInt32 bufsize;

//変換後のサイズの取得
SFUMailUtil::JisToSJis(src.GetCString(), src.GetLengthCString()+1,
                 null, 0, null, &bufsize);
// バッファの確保と変換
ACharPtr buf = new AChar[bufsize];
SFUMailUtil::JisToSjis(src.GetCString(), src.GetLengthCString()+1, buf, bufsize);

// SFXAnsiString に変換する
SFXAnsiString result;
result.Attach(buf, bufsize);    // result には変換後の文字列が入る

参照 SFUMailUtil::JisToSJis | SFXAnsiString::Attach

      

Shift JIS 文字コードを JIS に変換する

バージョン 4.0 以降

SFXMailUtility::ShiftJISToJIS() 関数を利用することができます。

SFXAnsiString src("あいうえお");  // 変換したい文字列
SFXAnsiString result;

SFXMailUtility::ShiftJISToJIS(src, &result);

バージョン 3.0

Shift JIS 文字コードを JIS に変換するには、SFUMailUtil::SjisToJis 関数を使用します。

SFXAnsiString src("あいうえお");  // 変換したい文字列
UInt32 bufsize;

// 変換後のサイズの取得
SFUMailUtil::SjisToJis(src.GetCString(), src.GetLengthCString()+1,
                null, 0, null, &bufsize);
// バッファの確保と変換
ACharPtr buf = new AChar[bufsize];
SFUMailUtil::SjisToJis(src.GetCString(), src.GetLengthCString()+1, buf, bufsize);

// SFXAnsiString に変換
SFXAnsiString result;
result.Attach(buf, bufsize);  // result には変換後の文字列が入る

参照 SFUMailUtil::SjisToJis | SFXAnsiString::Attach