![]() |
Umlaute in string erstetzen
hallo zusammen
ich habe einen String in dem ich die Umlaute folgendermassen ersetzen möchte: stringreplace(bezeichnung,'ä','ae',[rfReplaceAll, rfIgnoreCase]); leider klappt das nicht, das ü wird im Debuger als #252 angezeigt. was mache ich falsch ? EDIT: bezeichnung:= stringreplace(bezeichnung,'ä','ae',[rfReplaceAll, rfIgnoreCase]); |
AW: Umlaute in string erstetzen
Wie wäre es mit auswertung des Rückgabewertes?
Code:
und ü hat den Ordinalwert #252, das ist dann auch ok.
bezeichnung := stringreplace(bezeichnung,'ä','ae',[rfReplaceAll, rfIgnoreCase]);
|
AW: Umlaute in string erstetzen
Zitat:
das ä wurde aber trotzdem nicht durch ae ersetzt :-( |
AW: Umlaute in string erstetzen
Eigentlich sollte es klappen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var bezeichnung: string; begin bezeichnung := 'Öktöberfest in München. Da tränkt man viel Bier.'; bezeichnung := stringreplace(bezeichnung,'ä','ae',[rfReplaceAll, rfIgnoreCase]); bezeichnung := stringreplace(bezeichnung,'ü','ue',[rfReplaceAll, rfIgnoreCase]); bezeichnung := stringreplace(bezeichnung,'ö','oe',[rfReplaceAll, rfIgnoreCase]); ShowMessage(bezeichnung); end; |
AW: Umlaute in string erstetzen
Ich lese gerade Freepascal!
Kann es sein das hier diese Funktion einen fehler hat? In Freepascal/Lazarus ist man ja auf die Glorreiche Idee gekommen im Gegensatz zu allen anderen relevanten modernen Programmiersprachen/Frameworks wie .NET/Java/Delphi (:-) Unicode rein per UTF8 zu realiseren und keinen Wide/Unicodestring einzuführen/durchzuziehen. Da gab schon öfter einige Funktionen die das dann nicht berücksichtigt hatten. Evtl erwartet ja diese Funktion unter FP/lazarus einen UTF8-String statt eines ANSI-Strings. |
AW: Umlaute in string erstetzen
ja mit deinem Oktoberfest klappt es auch :-(
Mein Wert kommt aber aus der DB und da klappt es leider nicht, bezeichnung:= orteZTable.FieldByName('bezeichnung').asstring; das DB feld ist folgendermassen definiert : BEZEICHNUNG CHAR(100) CHARACTER SET ISO8859_1 COLLATE DE_DE, |
AW: Umlaute in string erstetzen
Zitat:
EDIT: super, so funktionierts :-) Ich danke euch |
AW: Umlaute in string erstetzen
Zitat:
|
AW: Umlaute in string erstetzen
Ich danke euch
|
AW: Umlaute in string erstetzen
Ansonsten hätte ich dir eine meiner Funktionen empfohlen. Die habe ich damals bei Delphi 3 geschrieben, die hatte kein StringReplace. Die Funktion ist zwar für Strings, aber ich schätze die kann man für seine Bedürfnisse anpassen:
Delphi-Quellcode:
type
TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase); //Wichtig!!! Global setzen function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string; function PosEx(Substr: string; S: string; Flag: TReplaceFlags): Integer; begin if rfIgnoreCase in Flag then Result := Pos(AnsiUpperCase(Substr), AnsiUpperCase(S)) else Result := Pos(Substr, S); end; var S2: String; begin S2 := S; Result := ''; while Length(S2) > 0 do begin if PosEx(OldPattern, S2, Flags) > 0 then begin Result := Result + Copy(S2, 1, PosEx(OldPattern, S2, Flags) - 1); Delete(S2, 1, PosEx(OldPattern, S2, Flags) + Length(OldPattern) - 1); Result := Result + NewPattern; end else begin Result := Result + S2; Delete(S2, 1, Length(S2)); end; if not (rfReplaceAll in Flags) then begin Result := Result + S2; Delete(S2, 1, Length(S2)); end; end; end; {Popov} |
AW: Umlaute in string erstetzen
und das funktioniert auch, wenn der String utf-8 kodiert ist?
|
AW: Umlaute in string erstetzen
Keine Ahnung, wahrscheinlich nicht, habe ich auch für Delphi 3 geschrieben. Ist auch nur selber etwas machen.
|
AW: Umlaute in string erstetzen
Das wird ihm nicht viel helfen, da das ANSI-UTF8-Problem weiterhin besteht.
Manchmal ist es zwar nervig, daß Delphi automatisch die Stringtypen konvertiert und da "versucht" automatisch die "richtige/passende" Konvertierung zu wählen, aber meistens ist es doch recht praktisch, daß hier Compiler und RTL/VCL zusammengehören. Bei Lazarus ist halt das Problem, daß FPC und Lazarus nicht wirklich zusammengehören. Der Compiler (FreePascal) und seine Typen sind weiterhin ANSI (bei Delphi hatte man sich dazu entschieden das auf Unicode umzustellen, genauer auf UCS2/UTF-16, was allerdings andere Probleme verursachte), wärend Lazarus (RTL/VCL) an den meisten Stellen auf UTF-8 (damit es in 'nen AnsiString paßt) umgestellt wurde. Nur gibt es da eben hier und da einige Probleme, wenn man vergißt die String-Kodierung anzupassen, bzw. wenn unterschiedliche Kodierungen aufeinandertreffen. Man kann eben kein ANSI "ä" in einem UTF-8-String finden, oder umgekehrt. |
AW: Umlaute in string erstetzen
ich danke euch allen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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