Это можно сделать так:
saveClientDataSetToWin1251EncodedFile
(
TCustomClientDataSet* dataSet,
const String fileName
)
{
int size;
char* buffer;
TFileStream* fileStream;
TMemoryStream* memoryStream;
AnsiString string;
WideString wideString;
try
{
memoryStream = new TMemoryStream();
dataSet->SaveToStream(memoryStream, dfXMLUTF8);
size = memoryStream->Size;
memoryStream->Position = 0;
string.SetLength(size);
memoryStream->Read(string.c_str(), string.Length());
string = AnsiReplaceStr
(string, "encoding=\"UTF-8\"","encoding=\"windows-1251\"");
size = MultiByteToWideChar(CP_UTF8, 0, string.c_str(), -1, 0, 0);
wideString.SetLength(size);
MultiByteToWideChar(CP_UTF8, 0, string.c_str(), -1,
wideString.c_bstr(), size);
size = WideCharToMultiByte
(1252, 0, wideString.c_bstr(), -1, NULL, 0, NULL, NULL);
size--;
if (size > 0)
{
buffer = new char[size];
WideCharToMultiByte
(1252, 0, wideString.c_bstr(), -1, buffer, size, NULL, NULL);
fileStream = new TFileStream(fileName, fmCreate);
fileStream->WriteBuffer(buffer, size);
}
}
__finally
{
delete[] buffer;
delete fileStream;
delete memoryStream;
}
}
С уважением, Андрей Терехин.