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 и в таком виде, к примеру, сохранить его в файл.
Подскажите пожалуйста.


Anatoly Podgoretsky   (2007-08-05 13:16:00) [21]

> Yanis  (05.08.2007 13:00:31)  [31]

Я говорю о программирование и об конкретном приведеном коде.


Anatoly Podgoretsky   (2007-08-05 13:16:00) [22]

> Yanis  (05.08.2007 12:57:29)  [29]

Имелся в виду именно другой RAD, например Kylix, .NET - это включает и будущие RAD
Не застреваем в 2000 году.


Anatoly Podgoretsky   (2007-08-05 13:14:00) [23]

> Инс  (05.08.2007 12:56:28)  [28]

Так в 20 указано, что для generic типов размер определен только на отдельном участке времени и на отдельной реализации компилятора. Написание SizeOf(Type) позволяет избежать ошибок и полного переписывания проекта при миграции или изменение типов.
Те кто это не придерживаются, пожизненно занимаются сексом с компилятором.
Правда этим они очень хорошо защищают свои рабочии места, но иногда и лишаются их.
Наиболее наглядно это произошло в период перехода с 16 бит на 32.
А с тех пор среда еще больше расширилась, у многих их них еще большие проблемы при переходе или на Линух или на .NET

P.S. WideChar это Generic тип, но тоже самое правильно писать для любых типов, даже для фундаментальных. Поскольку какая разница изменится тип или программист сменит тип например с Word на Integer - программа должна работать без переписывания кода, не делая поиск 2 и замена его на 4, а это не всегда и возможно.

Зачем себя загонять в угол. Всего то надо соблюдать культуру программирования, быть профессионалом, а не воинствующим ламером. Подобное поведение должно быть на уровне генокода.


Инс   (2007-08-05 13:01:00) [24]

Янис, я говорил про переносимость на уровне исходника. Но Анатолий утверждает [20] в ответ на [18]


Yanis   (2007-08-05 13:00:00) [25]


> Безусловно, но меня интересует именно утверждение [20] в
> ответ на [18]

Кажется я понял в чём раздор.
Инсимеет ввиду готовый бинарник в котором конечно же размер 2 уже вшит, а Anatoly Podgoretskyговорит скорее всего о переносимости исходников.


Инс   (2007-08-05 12:58:00) [26]


> [29] Yanis ©   (05.08.07 12:57)

Наверное


Yanis   (2007-08-05 12:57:00) [27]


> А скажем на другой RAD это будет mov eax,$00000004

Т.е. не "RAD", а "компилятор" имелось ввиду наверняка.


Инс   (2007-08-05 12:56:00) [28]


> А скажем на другой RAD это будет mov eax,$00000004

Безусловно, но меня интересует именно утверждение [20] в ответ на [18]


Anatoly Podgoretsky   (2007-08-05 12:55:00) [29]

А скажем на другой RAD это будет mov eax,$00000004


Инс   (2007-08-05 12:55:00) [30]


> [25] Yanis ©   (05.08.07 12:53)

Не знаю, что ожидается. Посмотрите на [20], у него и спросите


Yanis   (2007-08-05 12:53:00) [31]


> Ну, посмотрели? Там ключевая строчка
> mov eax,$00000002

Ну а что ожидается? Конечно 2, т.к. компилятор знает размер.


Инс   (2007-08-05 12:51:00) [32]

Ну, посмотрели? Там ключевая строчка
mov eax,$00000002


Yanis   (2007-08-05 12:36:00) [33]


> а вы сомневаетесь

Не знаю кто как, а я просто хотел всё предельно для себя прояснить.
Никаких переворотов совершить не стремился :)


Инс   (2007-08-05 12:34:00) [34]


> [20] Anatoly Podgoretsky ©   (05.08.07 12:31)

Тогда посмотрите в окошке CPU, как компилятор справится со следующим кодом:
Caption:=IntToStr(SizeOf(WideChar));

Потом расскажите.


Anatoly Podgoretsky   (2007-08-05 12:33:00) [35]

И чего копья ломаете на ровном месте?
MetalFan ©   (05.08.07 12:13) [8] просто признал этот факт и исправился, а вы сомневаетесь в основах языка и культуре программирования.
Тема то страра как мир


Anatoly Podgoretsky   (2007-08-05 12:31:00) [36]


> Инс ©   (05.08.07 12:29) [18]

Утверждаю, и так уже было для Integer и других типов


Anatoly Podgoretsky   (2007-08-05 12:30:00) [37]


> > The WideString type represents a dynamically allocated
> string
> > of 16-bit Unicode characters.
>
> Я основывался на этом.

Ты основываешься не на том, разница тут распределяется на UCS-2 и UCS-4 и в справке


> The Windows operating system supports Unicode (UCS-2). The
> Linux operating system supports UCS-4, a superset of UCS-
> 2. Borland's RAD products support UCS-2 on both platforms.
>

И не только Borland's RAD а и язык Дельфи и ее исполнимый код


Инс   (2007-08-05 12:29:00) [38]


> Станет и еще как станет.

Т.е. Вы утверждаете, что если написать SizeOf(WideChar), то однажды написанная и скомпилированная таким образом программа будет работать даже тогда, когда WideChar будет 10-битным?


Anatoly Podgoretsky   (2007-08-05 12:27:00) [39]

Станет и еще как станет.
Так же говорили и во времена 16 битных компиляторов, а потом годами растешали проблемы. Тоже было и с проблемой 2К - точно также утверждали, что двух байт для года хватит, а не хватило, и hard code constants прямо относятся к этой проблеме, не надо писать * число, обязательно писать SizeOf(Type)


Yanis   (2007-08-05 12:26:00) [40]


> Это вообще ересь, поддерживает и 16 битную и 32 битную

Возможно мы по разному воспринимаем слово "поддерживает".
В справке про Wide String написано вот, что:

> The WideString type represents a dynamically allocated string
> of 16-bit Unicode characters.

Я основывался на этом.


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

Наверх

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