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 и многое другое.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.