![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Конвертация в Unicode
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()