Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

Конвертация в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.045 c
1-1161939857
Jolik
2006-10-27 13:04
2006.12.10
Есть работа... (сорри за оффтоп - в форуме "Прочие" ...


2-1164292901
Defort
2006-11-23 17:41
2006.12.10
Работа с датой


3-1160030440
Term
2006-10-05 10:40
2006.12.10
Как работать с АДО напрямую не через компоненты


3-1158810664
Lex_!
2006-09-21 07:51
2006.12.10
Формирование меню из таблици базы данных


2-1163938652
YesWa=>rOFF
2006-11-19 15:17
2006.12.10
Ошибка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский