Re[2]: Кодировка ClientDataSet SaveToFile
От: АТ Россия  
Дата: 21.12.05 11:32
Оценка:
Это можно сделать так:

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;
    }
}


С уважением, Андрей Терехин.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.