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

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

Конвертация в Unicode


Страницы:   1 2

Term ©   (2006-11-21 13:08:00) 

как сконвертировать строку из DOS в Unicode


Term   (2006-11-21 16:17:00) [21]

и вот так тоже не работает...

procedure PrintFile2(const FileName:string);
var
 i,nRet:integer;
 ansichar:PAnsiChar;
 widestring:PWideChar;
 f:TFileStream;
begin
 ansichar:=PChar(Form1.Edit1.Text);
//  nRet:=MultibyteToWideChar(CP_OEMCP, MB_COMPOSITE, ansichar, Length(Form1.Edit1.Text), widestring, Length(Form1.Edit1.Text));
//  widestring := PWideChar(LocalAlloc(LPTR, nRet * 2 + 2));

nRet := MultiByteToWideChar(CP_OEMCP, MB_PRECOMPOSED, ansichar, -1, nil, 0);
widestring := PWideChar(LocalAlloc(LPTR, nRet * 2 + 2));

 Form1.Edit2.Text:=widestring;

 f:=TFileStream.Create(FileName,fmCreate);
 try
  for i:=1 to Length(widestring) do
   begin
   f.Write(widestring[i],sizeof(widestring[i]));
   end;
 finally
  f.Free;
  LocalFree(LPTR);
 end;

end;


Term   (2006-11-21 16:15:00) [22]

народ вот такой вариант со всеми изменения всё равно не работает

procedure PrintFile2(const FileName:string);
var
 i,nRet:integer;
 ansichar:PAnsiChar;
 widestring:PWideChar;
 f:TFileStream;
begin
 ansichar:=PChar(Form1.Edit1.Text);
 nRet:=MultibyteToWideChar(CP_OEMCP, MB_COMPOSITE, ansichar, Length(Form1.Edit1.Text), widestring, Length(Form1.Edit1.Text));
 widestring := PWideChar(LocalAlloc(LPTR, nRet * 2 + 2));
 Form1.Edit2.Text:=widestring;

 f:=TFileStream.Create(FileName,fmCreate);
 try
  for i:=1 to Length(widestring) do
   begin
   f.Write(widestring[i],sizeof(widestring[i]));
   end;
 finally
  f.Free;
  LocalFree(LPTR);
 end;

end;


по прежнему создаёца пустой файл


Term   (2006-11-21 16:05:00) [23]

спасибо


Barloggg   (2006-11-21 15:58:00) [24]

и еще юникод больше чем один байт.
значит надо делать не так
   f.Write(widestring[i],1)

а хотя бы так:
    f.Write(widestring[i],sizeof(widestring[i]))


Term   (2006-11-21 15:54:00) [25]

спасибо щас буду пробывать


clickmaker   (2006-11-21 15:50:00) [26]


> [11] Term ©   (21.11.06 15:46)

nRet := MultiByteToWideChar(OEMCP, MB_PRECOMPOSED, ansichar, -1, nil, 0);
widestring := PWideChar(LocalAlloc(LPTR, nRet * 2 + 2));

не забудь потом LocalFree сказать


Term   (2006-11-21 15:46:00) [27]


> память под widestring выдели наконец

покажи как?


clickmaker   (2006-11-21 15:43:00) [28]


>  [9] Term ©   (21.11.06 15:43)

память под widestring выдели наконец


Term   (2006-11-21 15:43:00) [29]

еще вопрос

вот так конвертит и помещает в Edit

procedure PrintFile2(const FileName:string);
var
 f:TFileStream;
 i:integer;
 ansichar:PAnsiChar;
 widestring:PWideChar;
begin
 ansichar:=PChar(Form1.Edit1.Text);
 MultibyteToWideChar(CP_OEMCP, MB_COMPOSITE, ansichar, Length(Form1.Edit1.Text), widestring, Length(Form1.Edit1.Text));
 Form1.Edit2.Text:=widestring;
end;


а если результат пробую записать в файл
то widestring возвращаеца nil, чё за грабли?
procedure PrintFile2(const FileName:string);
var
 f:TFileStream;
 i:integer;
 ansichar:PAnsiChar;
 widestring:PWideChar;
begin
 ansichar:=PChar(Form1.Edit1.Text);
 MultibyteToWideChar(CP_OEMCP, MB_COMPOSITE, ansichar, Length(Form1.Edit1.Text), widestring, Length(Form1.Edit1.Text));
 Form1.Edit2.Text:=widestring;

 f:=TFileStream.Create(FileName,fmCreate);
 try
  for i:=1 to Length(widestring) do
   begin
   f.Write(widestring[i],1)
   end;
 finally
  f.Free;
 end;

end;


Term   (2006-11-21 15:13:00) [30]

так MB_ERR_INVALID_CHARS

а при использовании этой опции не компилица...

говорит
[Pascal Error] Unit1.pas(37): E2003 Undeclared identifier: 'MB_ERR_INVALID_CHARS'


Term   (2006-11-21 15:04:00) [31]

MultibyteToWideChar(CP_OEMCP, MB_PRECOMPOSED, ansichar, Length(Form1.Edit1.Text), widestring, Length(Form1.Edit1.Text));

вот так вроде не материца


Anatoly Podgoretsky   (2006-11-21 15:02:00) [32]

> Term  (21.11.2006 14:57:04)  [4]

А память Пушкин будет выделять?


Anatoly Podgoretsky   (2006-11-21 15:00:00) [33]

> Term  (21.11.2006 14:53:02)  [2]

MultiByteToWideChar(CP_OEMCPб, MB_ERR_INVALID_CHARS, S, N, WS, N);


Term   (2006-11-21 14:57:00) [34]

var
  i:integer;
 ansichar:PAnsiChar;
 widestring:PWideChar;
begin
 ansichar:=PChar(Form1.Edit1.Text);

 MultibyteToWideChar(CP_OEMCP, MB_PRECOMPOSED, ansichar, Length(Form1.Edit1.Text), widestring, 1);
 Form1.Edit2.Text:=widestring;


Anatoly Podgoretsky   (2006-11-21 14:57:00) [35]

> Term  (21.11.2006 14:53:02)  [2]

А как неправильно делал?


Term   (2006-11-21 14:53:00) [36]

можно примерчика то чтото у меня постоянно материца


clickmaker   (2006-11-21 13:10:00) [37]

MultibyteToWideChar()


Страницы:   1 2

Наверх

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