![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразовать текст в Unucode [D7, WinXP]
Antonito © (2007-08-05 01:19:00)Здравствуйте.
Подскажите пожалуйста как преобразовать текст (string) в кодировку unicode.
Пробовал функцией StringToWideChar, но если проверить текст на выходе (поместить его в какой-нибудь TMemo или вывести через ShowMessage), то текст отображается не в unicode-кодировке, а в оригинале.
Пробовал и так:
function StringToUnicode(Value: string): WideString;
begin
SetLength(Result, length(Value));
MultiByteToWideChar(CP_ACP, 0, PChar(Value), length(Value), PWideChar(Result), length(Value));
end;
то же самое.
Вобщем, мне нужно текст из Memo1 преобразовать в unicode и в таком виде, к примеру, сохранить его в файл.
Подскажите пожалуйста.
Инс (2007-08-05 12:23:00) [41]
> [10] Anatoly Podgoretsky © (05.08.07 12:16)
Анатолий, от того, что напишешь SizeOf(WideChar), программа переносимее не станет, разве что на уровне исходного кода.
Плюс, не вижу ничего страшного в данно конкретном случае, что бы напомнило мне проблему 2000
Anatoly Podgoretsky (2007-08-05 12:22:00) [42]> Yanis (05.08.2007 12:18:11) [11]
Это вообще ересь, поддерживает и 16 битную и 32 битную
Anatoly Podgoretsky (2007-08-05 12:21:00) [43]> MetalFan (05.08.2007 12:13:08) [8]
> Length(lWStr) * SizeOf(WideChar)
Вот здесь нет замечаний, все профессионально.
Anatoly Podgoretsky (2007-08-05 12:18:00) [44]> Yanis (05.08.2007 12:12:07) [7]
Кто сказал, не соблаговольшь ли взглянуть в справку и ознакомиться, что такое юникод вообще.
Кроме того даже если и 16-битный, то это не повод писать * 2, но он не 16 битный, он много шире. В справке хорошо документировано.
Yanis (2007-08-05 12:18:00) [45]
> SizeOf(WideChar)
Блин ну это понятно.
Но компилятор Delphiвроде более 16-битную кодировку и не поддерживает. Имеет смысл для совместимости разве только :)
Я думал тут что то грандиозное :o)
Anatoly Podgoretsky (2007-08-05 12:16:00) [46]> Инс (05.08.2007 11:34:05) [5]
Естественно не поверю.
Но напомню "Борис ты не прав"
А если не понятна мысль, то посоветую почитать разделы справки и культуру программирования, использовать числовые hard coded значения вместо расчетных констант - это даже не плохой тон, а самоубийство или ламерство. Такое очень наблюдалось во время перехода с 16 бит на 32, когда прекращал работать код X * 2, вместо написания Х * SizeOf(Integer) - здесь именно этот случай.
Инс (2007-08-05 12:14:00) [47]Анатолий ушел учить матчасть :)
MetalFan (2007-08-05 12:13:00) [48]Ладно) если уж совсем красиво, то так:
Length(lWStr) * SizeOf(WideChar)
Yanis (2007-08-05 12:12:00) [49]Ну * 2это потому что 16-битный Unicodeв Delphi.
Истинно не понимаю нареканий
> Anatoly Podgoretsky © (05.08.07 11:27) [4]
Zagaevskiy (2007-08-05 11:37:00) [50]Извините, Анатолий, но привлекаю Ваше внимание :
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1183987668&n=9
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1186217934&n=3
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1186294194&n=18
Инс (2007-08-05 11:34:00) [51]
> [4] Anatoly Podgoretsky © (05.08.07 11:27)
Вы не поверите, но MetalFan прав ;)
Anatoly Podgoretsky (2007-08-05 11:27:00) [52]> MetalFan (05.08.2007 08:25:03) [3]
Что здесь делает * 2, придумываешь проблему 2000 на ровном месте.
MetalFan (2007-08-05 08:25:00) [53]
var
lFS: TFileStream;
lAStr: string;
lWStr: WideString;
begin
lAStr := 'строка, которая будет преобразована в unicode';
lWStr := lAStr;
lFS := TFileStream.create( 'unicode.txt', fmCreate );
lFS.Write( lWStr[1], Length(lWStr) * 2 );
lFS.Free;
Antonito (2007-08-05 02:06:00) [54]Ok, этот момент понял. Спасибо.
А вот ещё такое...Чтобы сохранить unicode-текст в файл - как это лучше реализовать?
Плохиш (2007-08-05 01:38:00) [55]
> Пробовал функцией StringToWideChar, но если проверить текст
> на выходе (поместить его в какой-нибудь TMemoили вывести
> через ShowMessage), то текст отображается не в unicode-кодировке,
> а в оригинале.
TMemo и ShowMessage не поддерживают юникоде, соответственно происходит обратное преобразование. Добавь в свой юникоде, к примеру, ü и получишь знак вопроса. Используй функцию MessageBox W.