Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Конвертация в Unicode   Найти похожие ветки 

 
Term ©   (2006-11-21 13:08) [0]

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


 
clickmaker ©   (2006-11-21 13:10) [1]

MultibyteToWideChar()


 
Term ©   (2006-11-21 14:53) [2]

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


 
Anatoly Podgoretsky ©   (2006-11-21 14:57) [3]

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

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


 
Term ©   (2006-11-21 14:57) [4]

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 15:00) [5]

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

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


 
Anatoly Podgoretsky ©   (2006-11-21 15:02) [6]

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

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


 
Term ©   (2006-11-21 15:04) [7]

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

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


 
Term ©   (2006-11-21 15:13) [8]

так MB_ERR_INVALID_CHARS

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

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


 
Term ©   (2006-11-21 15:43) [9]

еще вопрос

вот так конвертит и помещает в 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;


 
clickmaker ©   (2006-11-21 15:43) [10]


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

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


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


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

покажи как?


 
clickmaker ©   (2006-11-21 15:50) [12]


> [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:54) [13]

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


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

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

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


 
Term ©   (2006-11-21 16:05) [15]

спасибо


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

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

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:17) [17]

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

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;


 
clickmaker ©   (2006-11-21 16:17) [18]


> nRet:=MultibyteToWideChar(CP_OEMCP, MB_COMPOSITE, ansichar,
> Length(Form1.Edit1.Text), widestring, Length(Form1.Edit1.Text));
>  widestring := PWideChar(LocalAlloc(LPTR, nRet * 2 + 2));

а вот за такое можно и партбилет на стол положить.

Мужик, почитай матчасть. Что такое строки, Char, WideChar, что такое указатели, зачем память выделять и когда?


 
Term ©   (2006-11-21 16:23) [19]

понял почитать...
щас покажите как оно должно быть

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


эти строки вместо моих тоже возвращают widestring=nil


 
clickmaker ©   (2006-11-21 16:25) [20]


> эти строки вместо моих тоже возвращают widestring=nil

а что должны?


 
Term ©   (2006-11-21 16:29) [21]

я хочу сконвертить строку которую поместил в Form1.Edit1.Text в юникод и поместить её в Form1.Edit2.Text и записать в файл...


 
clickmaker ©   (2006-11-21 16:31) [22]


> [21] Term ©   (21.11.06 16:29)

не переводи стрелки.
что по-твоему должно быть в widestring после
nRet := MultiByteToWideChar(OEMCP, MB_PRECOMPOSED, ansichar, -1, nil, 0);
widestring := PWideChar(LocalAlloc(LPTR, nRet * 2 + 2));
и почему?


 
Term ©   (2006-11-21 16:36) [23]

до твоего вопроса я думал что там должна быть сконверченная строка...

если я глубоко запутался, тогда как оно должно быть? чтоб сконвертировать...


 
clickmaker ©   (2006-11-21 16:38) [24]


> [23] Term ©   (21.11.06 16:36)
> до твоего вопроса я думал что там должна быть сконверченная
> строка

так... а где сам процесс конвертации?


 
Term ©   (2006-11-21 16:41) [25]


> clickmaker ©   (21.11.06 13:10) [1]
> MultibyteToWideChar()

я так понял первоначально что для этого нужна функция которую ты показал...


 
clickmaker ©   (2006-11-21 16:43) [26]

ну ткни пальцем, где в этой строке
nRet := MultiByteToWideChar(OEMCP, MB_PRECOMPOSED, ansichar, -1, nil, 0);
конвертация widestring?


 
Term ©   (2006-11-21 16:45) [27]

вот тут не ткнёш...

потому и была строка по которой партбилет на стол...


 
clickmaker ©   (2006-11-21 16:52) [28]


> [27] Term ©   (21.11.06 16:45)

хорошо... берем эти строки

nRet:=MultibyteToWideChar(CP_OEMCP, MB_COMPOSITE, ansichar, Length(Form1.Edit1.Text), widestring, Length(Form1.Edit1.Text));
widestring := PWideChar(LocalAlloc(LPTR, nRet * 2 + 2));

во 2-й строке что делается?


 
Anatoly Podgoretsky ©   (2006-11-21 16:54) [29]

> clickmaker  (21.11.2006 15:50:12)  [12]

А Я бы использовал SetLength и забыл бы про выделение или же WS := S такой же результат.


 
Anatoly Podgoretsky ©   (2006-11-21 16:55) [30]

> Term  (21.11.2006 16:15:16)  [16]

Выделять надо до использования, а не после.


 
clickmaker ©   (2006-11-21 16:55) [31]


> [29] Anatoly Podgoretsky ©   (21.11.06 16:54)
> > clickmaker  (21.11.2006 15:50:12)  [12]
>
> А Я бы использовал SetLength и забыл бы про выделение

да дело-то не в этом...


 
Term ©   (2006-11-21 16:57) [32]


>
> да дело-то не в этом...

покажите как мне сконвертировать...
а в теории я разберусь если еще и будет работающий пример под рукой


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

> clickmaker  (21.11.2006 16:55:31)  [31]

> да дело-то не в этом...

До этого я уже дошел :-)
Поэтому мы и здесь.


 
clickmaker ©   (2006-11-21 17:05) [34]


> [32] Term ©   (21.11.06 16:57)
>
> >
> > да дело-то не в этом...
>
> покажите как мне сконвертировать...

тебе в [30] уж настолько прозрачный намек сделали...


 
Anatoly Podgoretsky ©   (2006-11-21 17:09) [35]

> clickmaker  (21.11.2006 17:05:34)  [34]

Ему и и намеков кучу сделали и прямо тоже сказали.


 
Term ©   (2006-11-21 17:31) [36]

ладно не смейтесь надо мной, заработало таки спасибо :) что помогли


 
guav ©   (2006-11-21 18:50) [37]

Обёртки для MultibyteToWideChar и WideCharToMultibyte

http://www.kladovka.net.ru/index.cgi?pid=list&rid=378



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.029 c
2-1164310772
Kostafey
2006-11-23 22:39
2006.12.10
Экспорт из TBDGridEh в Excel


2-1164527238
Chuk & Gek
2006-11-26 10:47
2006.12.10
мыло


15-1164011476
Gavrila
2006-11-20 11:31
2006.12.10
TTreeView: как правильно использовать метод AddObject?


2-1163957179
AlexeyT
2006-11-19 20:26
2006.12.10
Вопрос по MapViewOfFile


2-1163846597
nop
2006-11-18 13:43
2006.12.10
Проблема с параметром color в XP