Вот более VCL-ориентированный подход для вас:
UTF8String utf8 = "...";
WideString utf16;
AnsiString latin1;
int len = ::MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), utf8.Length(), NULL, 0);
utf16.SetLength(len);
::MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), utf8.Length(), utf16.c_bstr(), len);
len = ::WideCharToMultiByte(1252, 0, utf16.c_bstr(), utf16.Length(), NULL, 0, NULL, NULL);
latin1.SetLength(len);
::WideCharToMultiByte(1252, 0, utf16.c_bstr(), utf16.Length(), latin1.c_str(), len, NULL, NULL);
Если вы обновитесь до CB2009, вы можете упростить его до:
UTF8String utf8 = "...";
AnsiString<1252> latin1 = utf8;