Форум: "Начинающим";
Текущий архив: 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]еще вопрос
вот так конвертит и помещает в Editprocedure 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.048 c