Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразовать текст в Unucode [D7, WinXP]


Страницы:   1 2 3

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.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо