Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не получается работать с UTF-8 [D6, WinXP]


Ji ©   (2005-08-24 22:49:00) 

Возникла необходимость обрабатывать файл, созданный программой написанной на Java, в котором чередуются строки в формате UTF-8 и числа Int. Начал писать код, но все время получал ошибку при завершении программы.
В итоге пришел к следующей ситуации.

Вот такой код:

procedure TForm1.Button1Click(Sender: TObject);
var
       UTFStr, UTFStr2: UTF8String;
       f: file;
       Str,Str2: String;
       err: Integer;
begin
       Str := 'Мама мыла раму';
       UTFStr := UTF8Encode(Str);
       
       AssignFile(f,'123');
       ReWrite(f,1);
       BlockWrite(f,UTFStr,Length(UTFStr),err);
       CloseFile(f);

       Reset(f,1);
       BlockRead(f,UTFStr2,Length(UTFStr),err);
       CloseFile(f);

       Str2 := UTF8Decode(UTFStr2);
       Memo1.Text := Str2;
end;


Если выполняю по F9, то: "privileged instruction at 0x008d3611. Process Stopped."
Пошаговое выполнение: та же ошибка, на строке "end;"
Если запускаю скомпилированный exe: Завершается без сообщений.
Все строки выполняются корректно и в конце Str2 = Str;


Ji   (2005-08-24 23:33:00) [1]

Премного благодарен


Anatoly Podgoretsky   (2005-08-24 23:24:00) [2]

Объяснение - ты портишь память, записываешь не туда куда надо.


Турист   (2005-08-24 23:21:00) [3]

Ошибки выделены

procedure TForm1.Button1Click(Sender: TObject);
var
      UTFStr, UTFStr2: UTF8String;
      f: file;
      Str,Str2: String;
      err: Integer;
begin
      Str := 'Мама мыла раму';
      UTFStr := UTF8Encode(Str);

      AssignFile(f,'123');
      ReWrite(f,1);
      BlockWrite(f, UTFStr[1], Length(UTFStr),err);
      CloseFile(f);

      Reset(f,1);
      SetLength(UTFStr2, Length(UTFStr));
      BlockRead(f, UTFStr2[1],Length(UTFStr),err);
      CloseFile(f);

      Str2 := UTF8Decode(UTFStr2);
      Memo1.Text := Str2;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо