WideToAnsi и AnsiToWide
От: .silent Россия http://www.bezhetsk.ru
Дата: 06.09.06 18:08
Оценка:
Добрый день.

Скачал как-то один исходничек и нашел там такие функции как WideToAnsi и AnsiToWide.
Где такие можно найти? Т.к. вместе с проектом они не шли, а стандартных таких вроде нет.

Пример:
ANSItoWide(tmp^.Desc, ws, CP_ACP);


tmp^.Desc — PChar
ws — pWideChar
CP_ACP — стандартная константа, она в наличии имеется.

Подскажите кто-нибудь, плиз?.
WinAMP крутит ...
Re: WideToAnsi и AnsiToWide
От: misha_irpen  
Дата: 06.09.06 21:40
Оценка: 2 (1)
Приветствую, .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
Re[2]: WideToAnsi и AnsiToWide
От: IgorSiticov Россия http://www.sicomponents.com
Дата: 07.09.06 05:30
Оценка: 2 (1)
Здравствуйте, 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;


Надеюсь поможет.
Успехов!
http://www.sicomponents.com
Delphi компоненты для многоязыковой поддержки (TsiLang); Resource Builder и многое другое.
Re[3]: WideToAnsi и AnsiToWide
От: .silent Россия http://www.bezhetsk.ru
Дата: 07.09.06 09:43
Оценка:
Всем спасибо за ответы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.