Кодирование мемо-полей набора данных странных деталей в TClientDataSet

Добрый день всем!

Я использую TClientDataSet, связанный с набором данных master-detail. Сначала сохраните данные (для дальнейшего обмена данными)

cdsImpExp.SaveToFile (aFileName, dfXML);

В полученном файле мемо-поля записываются во внутренней кодировке (какая кодировка, кстати?): T_PATIENTS_MEMO="!?@02:0 4;O МБ>9 " - для основного набора данных

T_OBSERVATION_MEMO="!?@02:0 4;O МБ>9 " - для набора подробных данных

Сейчас делаю

cdsImpExp.LoadFromFile(aFileName);

и попробуйте обработать каждое поле. Я получаю очень странное поведение для содержимого мемо-полей. Сначала я попытался прочитать эти поля как:

FieldValue: = Field.AsString;

В блоке данных основного набора данных содержится правильная строка в нужной кодировке (win-1251). Подробно мемо-поле набора данных содержит ту же последовательность символов, что и во входном файле (!?@02:0 4;O МБ>9). Хорошо. Я пытаюсь это:

  if Field.DataType = ftMemo then
  begin
    ms := TMemoryStream.Create;
    TMemoField(Field).SaveToStream(ms);
     ms.Position := 0;
     SetString(FieldValue, PChar(ms.Memory), ms.Size);

И FieldValue содержит что-то вроде 'Справка㐠㬄 right этой㼠䀄㸄' (некоторые символы правильные, а некоторые символы в японской кодировке).

Что я делаю не так? Как я могу прочитать значения памятного поля из xml-файла для подробного набора данных? Спасибо за вашу помощь.

У меня Delphi XE Update 1.

0 ответов

Другие вопросы по тегам