![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Unicode
Res © (2008-01-17 00:01:00)Здравствуйте! Подскажите как работать с Unicode в delphi. Какие компаненты использовать, функция кодирования из ansi в unicode и обратно.
Заранее благодарю.
iiiymaxep (2008-01-19 00:53:00) [1]{ Code Page Default Values. }
CP_ACP = 0; { default to ANSI code page }
CP_OEMCP = 1; { default to OEM code page }
CP_MACCP = 2; { default to MAC code page }
CP_THREAD_ACP = 3; { current thread's ANSI code page }
CP_SYMBOL = 42; { SYMBOL translations }
CP_UTF7 = 65000; { UTF-7 translation }
CP_UTF8 = 65001; { UTF-8 translation }
DVM (2008-01-17 13:08:00) [2]
> Какие компаненты использовать, функция кодирования из ansi
> в unicode и обратно.
Считай, что уже никаких. Были TNT Unicode Controls бесплатные, теперь они платные. В будущих версиях Delphi может добавят все таки.
Res (2008-01-17 13:04:00) [3]function WideStringToString(const ws: WideString; codePage: Word): AnsiString;
непонятно, что за CodePage?
Плохиш (2008-01-17 10:49:00) [4]
> Подскажите как работать с Unicode в delphi. Какие компаненты
> использовать
tnt
iiymaxep (2008-01-17 00:46:00) [5]Вот такой примерчик есть
{
Converts Unicode string to Ansi string using specified code page.
@param ws Unicode string.
@param codePage Code page to be used in conversion.
@returns Converted ansi string.
}
function WideStringToString(const ws: WideString; codePage: Word): AnsiString;
var
l: integer;
begin
if ws = '' then
Result := ''
else
begin
l := WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], -1, nil, 0, nil, nil);
SetLength(Result, l - 1);
if l > 1 then
WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], -1, @Result[1], l - 1, nil, nil);
end;
end; { WideStringToString }
{:Converts Ansi string to Unicode string using specified code page.
@param s Ansi string.
@param codePage Code page to be used in conversion.
@returns Converted wide string.
}
function StringToWideString(const s: AnsiString; codePage: Word): WideString;
var
l: integer;
begin
if s = '' then
Result := ''
else
begin
l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), -1, nil,
0);
SetLength(Result, l - 1);
if l > 1 then
MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]),
-1, PWideChar(@Result[1]), l - 1);
end;
end; { StringToWideString }
korneley (2008-01-17 00:44:00) [6]
> iiymaxep (17.01.08 00:36) [1]
А это разве не 866 <-> 1251 телодвижения? Однобайтные.
iiymaxep (2008-01-17 00:40:00) [7]Ах, сорри.... В уникод... Сча)
iiymaxep (2008-01-17 00:36:00) [8]Классика
function ConvertAnsiToOem(const S: string): string;
{$IFNDEF WIN32}
var
Source, Dest : array[0..255] of Char;
{$ENDIF}
begin
{$IFDEF WIN32}
SetLength(Result, Length(S));
if Length(Result) > 0 then
AnsiToOem(PChar(S), PChar(Result));
{$ELSE}
if Length(Result) > 0 then
begin
AnsiToOem(StrPCopy(Source, S), Dest);
Result := StrPas(Dest);
end;
{$ENDIF}
end; { ConvertAnsiToOem }
function ConvertOemToAnsi(const S: string): string;
{$IFNDEF WIN32}
var
Source, Dest : array[0..255] of Char;
{$ENDIF}
begin
{$IFDEF WIN32}
SetLength(Result, Length(S));
if Length(Result) > 0 then
OemToAnsi(PChar(S), PChar(Result));
{$ELSE}
if Length(Result) > 0 then
begin
OemToAnsi(StrPCopy(Source, S), Dest);
Result := StrPas(Dest);
end;
{$ENDIF}
end; { ConvertOemToAnsi }