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