![]() |
WideString zu AnsiString konvertieren
Ich hab einen WideString, der nur englischen Text erhält und würde ihn gerne zu AnsiString konvertieren.
Versucht habe ich es mit einer Jedi funktion: function UTF16ToCodepage(s: WideString): string; begin Result := WideStringToStringEx(s, GetACP()); end; Als Ergebnis kommt jedoch sowas in der Art raus (evaluate Ausgabe): 'e'#0'm'#0' '#0'w'#0'i'#0't'#0' |
AW: WideString zu AnsiString konvertieren
Bei mir (D2009) funktioniert das mit einer expliziten Umwandlung:
Delphi-Quellcode:
mit welcher Version arbeitest du?
String(MeinAnsiString)
Kannst du das vielleicht in dein Profil aufnehmen? |
AW: WideString zu AnsiString konvertieren
Wenn es sich um Delphi handelt und da du eh nur nach ACP kodieren willst:
Delphi-Quellcode:
Also, selbst mit einer impliziten Umwandlung sollte es gehn, auch wenn da der Compiler eventuell mit einer Warnung wirft.
function UTF16ToCodepage(s: WideString): string;
begin Result := s; //Result := AnsiString(s); end; Wenn das nicht geht, dann liegt der Fehler wohl in dem String, welchen du als Parameter reinbekommst. PS: Wenn du unbedingt nach ANSI kodieren mußt, dann statt
Delphi-Quellcode:
lieber ein
string
Delphi-Quellcode:
verwenden, denn ab Delphi 2009 wird der String kein AnsiString mehr sein.
AnsiString
|
AW: WideString zu AnsiString konvertieren
Liste der Anhänge anzeigen (Anzahl: 1)
Ich verwende Delphi 7 mit der neuesten Jedi version.
Die Beispiel-TextDatei ist angehängt. Ich lade sie so:
Delphi-Quellcode:
Evaluate von ws.Text gibt dies aus (alles korrekt):
ws := TWideStringList.Create;
ws.LoadFromFile(FileName); 'GStreamer Codec and Totem Movie Player for Linux'#$D#$A Wenn ich nun diese Umwandlung mache:
Delphi-Quellcode:
gibt Evaluate von s dies aus:
function UTF16ToCodepage(s: WideString): string;
begin Result := s; end; ... var s: string; begin ... s := UTF16ToCodepage(ws.Text); 'ÿþG'#0'S'#0't'#0'r'#0'e'#0'a'#0'm'#0'e'#0'r'#0' '#0'C'#0'o'#0'd'#0'e'#0'c'#0' '#0'a'#0'n'#0'd'#0' '#0'T'#0'o'#0't'#0'e'#0'm'#0' '#0'M'#0'o'#0'v'#0'i'#0'e'#0' '#0'P'#0'l'#0'a'#0'y'#0'e'#0'r'#0' '#0'f'#0'o'#0'r'#0' '#0'L'#0'i'#0'n'#0'u'#0'x'#0#$D#0#$A#0#$D#0#$A#0 String(s) liefert das gleiche Ergebnis. |
AW: WideString zu AnsiString konvertieren
Zitat:
Das externe? Wenn ja, dann schau mal nach, was das S in der Funktion sagt. Wenn es das Selbe sagt, dann ist die TWideStringList fehlerhaft. |
AW: WideString zu AnsiString konvertieren
function UTF16ToCodepage(s: WideString): string;
begin Result := s; end; Evaluate von s (WideString) innerhalb der Funktion ergibt: 'GStreamer Codec and Totem Movie Player for Linux'#$D#$A Evaluate von s (String) NACH der Funktion ergibt: 'ÿþG'#0'S'#0't'#0'r'#0'e'#0'a'#0'm'#0'e'#0'r'#0' '#0'C'#0'o'#0'd'#0'e'#0'c'#0' '#0'a'#0'n'#0'd'#0' '#0'T'#0'o'#0't'#0'e'#0'm'#0' '#0'M'#0'o'#0'v'#0'i'#0'e'#0' '#0'P'#0'l'#0'a'#0'y'#0'e'#0'r'#0' '#0'f'#0'o'#0'r'#0' '#0'L'#0'i'#0'n'#0'u'#0'x'#0#$D#0#$A#0#$D#0#$A#0 |
AW: WideString zu AnsiString konvertieren
Sehr interessant. :shock:
jedenfalls hatte ich damals in meinem D7 solche Probleme nicht. Geht es hiermit?
Delphi-Quellcode:
function UTF16ToCodepage(S: WideString): AnsiString;
var i: Integer; begin if S <> '' then begin i := WideCharToMultiByte(CP_ACP, 0, PWideChar(S), Length(S), nil, 0, nil, nil); SetLength(Result, i); WideCharToMultiByte(CP_ACP, 0, PWideChar(S), Length(S), PAnsiChar(Result), i, nil, nil); end else Result := ''; end;
Delphi-Quellcode:
Ich wußte garnicht daß Delphi bei einer Stringkonvertierung das BOM (FE FF) entfernt, jedenfalls sollte danach am Anfang des Strings ein "?" stehen. :shock:
'GStreamer Codec and Totem Movie Player for Linux'#$D#$A
Evaluate von s (String) NACH der Funktion ergibt: 'ÿþG'#0'S'#0't'#0'r'#0'e'#0'a'#0'm'#0'e'#0'r'#0' '#0'C'#0'o'#0'd'#0'e'#0'c'#0' '#0'a'#0'n'#0'd'#0' '#0'T'#0'o'#0't'#0'e'#0'm'#0' '#0'M'#0'o'#0'v'#0'i'#0'e'#0' '#0'P'#0'l'#0'a'#0'y'#0'e'#0'r'#0' '#0'f'#0'o'#0'r'#0' '#0'L'#0'i'#0'n'#0'u'#0'x'#0#$D#0#$A#0#$D#0#$A#0 |
AW: WideString zu AnsiString konvertieren
Damit klappt es, Danke!
Zitat:
|
AW: WideString zu AnsiString konvertieren
Ohh, stimmt, da hab'sch falschrum geguckt. :oops:
Jedenfalls is dieses beim 'GStr...' nicht zu sehn (aber was sollte man von einem 0-breitem Leerzeichen erwarten :lol: , obwohl viele Browser dieses eben doch darstellen, so als "unbekanntes" Zeichen) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz