![]() |
| ||
|
|
Новости |
Поиск |
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 и в таком виде, к примеру, сохранить его в файл.
Подскажите пожалуйста.
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]> быть профессионалом, а не воинствующим ламером.
Это ты инсу? Мдя...