this slowpoke moves

ASCii < > ANSi

Die ersten 127 Zeichen (7 Bit) dieser beiden Zeichenstandards sind jeweils gleich. Erst ab dem 128. Zeichen (8 Bit) unterscheiden sie sich.Diese beiden Proceduren wandeln einen String von ANSI nach ASCII und zurück.

procedure AsciiToAnsi(var S: string);
begin
  OemToCharBuff(Pointer(S), Pointer(S), Length(S));
end;

procedure AnsiToAscii(var S: string);
begin
  CharToOemBuff(Pointer(S), Pointer(S), Length(S));
end;
Dabei gilt es zu beachten, dass der ursprüngliche String durch den umgewandelten ersetzt wird.Die Funktionen können nicht mit WideChar-Strings eingesetzt werden, da WideChar mit 16 bit deklariert ist.
function WideStringToAnsiString(const WideSource: WideString; const CodePage: UINT = 65001): AnsiString;
var
  WideStrLen: Integer;
begin
  if WideSource <> '' then
  begin
    WideStrLen := WideCharToMultiByte(CodePage, 0, LPWSTR(WideSource), -1, nil, 0, nil, nil);
    if WideStrLen > 0 then
    begin
      SetLength(Result, WideStrLen - 1);
      WideCharToMultiByte(CodePage, 0, LPWSTR(WideSource), -1, LPSTR(Result), WideStrLen, nil, nil);
    end;
  end;
end;

function AnsiStringToWideString(const AnsiSource: AnsiString; const CodePage: UINT = 65001): WideString;
var
  AnsiStrLen: Integer;
begin
  if AnsiSource <> '' then
  begin
    AnsiStrLen := MultiByteToWideChar(CodePage, MB_PRECOMPOSED, LPSTR(AnsiSource), -1, nil, 0);
    if AnsiStrLen > 1 then
    begin
      SetLength(Result, AnsiStrLen - 1);
      MultiByteToWideChar(CodePage, MB_PRECOMPOSED, LPSTR(AnsiSource), -1, LPWSTR(Result), AnsiStrLen - 1);
    end;
  end;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate