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 19:08:00) [1]

> {RASkov}  (05.08.2007 17:40:54)  [54]

Тебе поможет следующая таблица

Char/WideChar
PChar/PWideChar
AnsiString/WideString


{RASkov}   (2007-08-05 17:40:00) [2]

> [53] MetalFan ©   (05.08.07 17:29)
> причем тут PWideChar?
> у WideString, как и у AnsiString, нумерация идет с 1...

Все верно.... это я что-то загнался про PWideChar...

> [52] Инс ©   (05.08.07 17:27)

Ни нет, а Да :)

В [53] все встало на свои места.... )


MetalFan   (2007-08-05 17:29:00) [3]

причем тут PWideChar?
у WideString, как и у AnsiString, нумерация идет с 1...


Инс   (2007-08-05 17:27:00) [4]


> Ну первый символ в PWideChar все равно будет иметь 0 индекс,
> а не 1.... или не так???

Нет :)


{RASkov}   (2007-08-05 17:20:00) [5]

> [50] Инс ©   (05.08.07 17:09)
> Для выделения памяти под длинные строки, динмассивы нужно
> использовать SetLength а не GetMem

Я не об этом :)
Ну первый символ в PWideChar все равно будет иметь 0 индекс, а не 1.... или не так???
Или что имелось ввиду в [46] Неа ;) ??


Инс   (2007-08-05 17:09:00) [6]


> [47] {RASkov} ©   (05.08.07 17:05)

Для выделения памяти под длинные строки, динмассивы нужно использовать SetLength а не GetMem


Инс   (2007-08-05 17:05:00) [7]


> [45] {RASkov} ©   (05.08.07 17:00)


Неа ;)


{RASkov}   (2007-08-05 17:05:00) [8]

Кстати,.... вроде вот так правильно должно быть.
(Length(lWStr) +1) * SizeOf(WideChar)
Если это нужно для выделения памяти под PWideChar....
Т.е.:
L:=Length(S)+1;
GetMem(P, L*SizeOf(WideChar));
где S: String, P: PWideChar, L: Int..


MetalFan   (2007-08-05 17:05:00) [9]


> Неа ;)

+1 !


{RASkov}   (2007-08-05 17:05:00) [10]

> [46] Инс ©   (05.08.07 17:05)

Как так??


{RASkov}   (2007-08-05 17:00:00) [11]

> [44] MetalFan ©   (05.08.07 16:53)

Тогда уж так:
Length(lWStr) * SizeOf(lWStr [0])
С нуля нумерация идет.... у тех у кого #нулем заканчивается...


MetalFan   (2007-08-05 16:53:00) [12]

а еще правильнее, имхо, написать вот так: Length(lWStr) * SizeOf(lWStr[1])


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


> Я не отвечал на [18]

Видимо у меня что-то с глазами тогда. Ну да ладно, все, кто видит это обсуждение, также заметят, ответом на какое сообщение было [20] и разберется кто прав, а кто - нет.


> а отвечал по поводу фундаментальных и производных типов,
> про перенос кода на другую RAD, другой компилятор.

Не надо мне это так подробно пытаться объяснить, я прекрасно это понимаю, не спорю. Тут вы правы. Переносимость будет только на уровне исходного кода. На этом можно и остановиться.


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

> Инс  (05.08.2007 13:21:38)  [38]

Я не отвечал на [18] а отвечал по поводу фундаментальных и производных типов, про перенос кода на другую RAD, другой компилятор.
И эти простейшие правила, на уровне генокода, делают этот процесс менее болезненым. Многие проекты переносятся без малейшей переделки, а переделки требуют части которые сильно зависят от платформы, и это не размер типа. Переносятся даже с .VCL на .NET, а не то что на 32 бита.
Борланд много сделал для этого, это и автоматический расчет размера в зависимости от типа и предупреждения о платфомозависимых функциях и многое другое.
Но указание SizeOf(Type) это уровень генотипа.


Dib@zol   (2007-08-05 13:38:00) [15]

Удалено модератором


  (2007-08-05 13:34:00) [16]

Удалено модератором


Anatoly Podgoretsky   (2007-08-05 13:33:00) [17]

> Dib@zol  (05.08.2007 13:18:36)  [36]

Нет не ему, а всем кто этого понять не хочет.


Инс   (2007-08-05 13:21:00) [18]

Анатолий, я безусловно согласен с тем, что для того, чтобы исходный кодбыл переносим между различными компиляторами, нужно придерживаться тех или иных правил. И то, даже если их соблюдать, далеко не всегда получается безболезненно перенести свой проект на новую версию. Но в своем вопросе [18] я не двусмысленно написал, "однажды написанная и скомпилированная", на что вы ответили [20]. Вот этот момент мне бы хотелось прояснить.


Anatoly Podgoretsky   (2007-08-05 13:20:00) [19]

> Инс  (05.08.2007 13:01:32)  [32]

Это твой вывод и неверный, ты вложил свои слова в моим уста. Я говорю о культуре написания исходных текстов. А то что 16 битный код, даже ДОС может исполняться на Windows 2003 не имеет отношения к проблеме правильного написания исходного кода.
Те кто не придерживался этого жестоко пострадали, первый раз при переходе на платформу 32, потом при переходе на 2000 год, а в основе лежала одна и таже проблема, мол все сойдет, на мой век хватит.


Dib@zol   (2007-08-05 13:18:00) [20]

> быть профессионалом, а не воинствующим ламером.

Это ты инсу? Мдя...


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

Наверх

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