Добрый день.
Скачал как-то один исходничек и нашел там такие функции как WideToAnsi и AnsiToWide.
Где такие можно найти? Т.к. вместе с проектом они не шли, а стандартных таких вроде нет.
Пример:
ANSItoWide(tmp^.Desc, ws, CP_ACP);
tmp^.Desc — PChar
ws — pWideChar
CP_ACP — стандартная константа, она в наличии имеется.
Подскажите кто-нибудь, плиз?.
WinAMP крутит ...
Приветствую, .silent!
s> Скачал как-то один исходничек и нашел там такие функции как WideToAnsi
s> и AnsiToWide. Где такие можно найти? Т.к. вместе с проектом они не шли,
s> а стандартных таких вроде нет.
s> Пример:
s> ANSItoWide(tmp^.Desc, ws, CP_ACP);
А в чем проблема? По крайней мере для CP-1251 все примитивно:
function AnsiToWide(const Src: AnsiString): WideString;
var
i: Integer;
begin
SetLength(Result, Length(Src));
for i:= 1 to Length(Src) do
Result[i]:= WideChar(Src[i]);
end;
function WideToAnsi(const Src: WideString): AnsiString;
var
i: Integer;
begin
SetLength(Result, Length(Src));
for i:= 1 to Length(Src) do
Result[i]:= Char(Src[i]);
end;
Удачи!
Posted via RSDN NNTP Server 2.0
Здравствуйте, misha_irpen, Вы писали:
_>А в чем проблема? По крайней мере для CP-1251 все примитивно:
Проблема именно в том, что там задавалась кодовая страница для перевода. Надо использовать WideCharToMultiByte и MultiByteToWideChar.
Можно попробовать следующий код:
function AnsiStringToWideStringCP(const AString: AnsiString; const CP: Cardinal): WideString;
var
Len: Integer;
begin
Len := MultiByteToWideChar(CP, 0, PChar(AString), Length(AString), nil, 0);
SetLength(Result, Len);
if Len > 0 then
begin
Len := MultiByteToWideChar(CP, 0, PChar(AString), Length(AString),
PWideChar(Result), Len);
if Len = 0 then Abort;
end;
end;
function WideStringToAnsiStringCP(const AWString: WideString; const CP: Cardinal): AnsiString;
var
Len: Integer;
lpUseDef: Boolean;
begin
lpUseDef := False;
Len := WideCharToMultiByte(CP, 0, PWideChar(AWString),
Length(AWString), nil, 0, nil, @lpUseDef);
Result := '';
SetLength(Result, Len);
if Len > 0 then
begin
Len := WideCharToMultiByte(CP, 0, PWideChar(AWString),
Length(AWString), PChar(Result), Len, nil, @lpUseDef);
if Len = 0 then Abort;
end;
end;
Надеюсь поможет.