AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Umlaute in string erstetzen

Ein Thema von khh · begonnen am 10. Nov 2012 · letzter Beitrag vom 10. Nov 2012
Antwort Antwort
Seite 1 von 2  1 2      
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#1

Umlaute in string erstetzen

  Alt 10. Nov 2012, 12:28
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]);
Karl-Heinz

Geändert von khh (10. Nov 2012 um 12:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Umlaute in string erstetzen

  Alt 10. Nov 2012, 12:36
Wie wäre es mit auswertung des Rückgabewertes?

Code:
bezeichnung := stringreplace(bezeichnung,'ä','ae',[rfReplaceAll, rfIgnoreCase]);
und ü hat den Ordinalwert #252, das ist dann auch ok.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Umlaute in string erstetzen

  Alt 10. Nov 2012, 12:38
Wie wäre es mit auswertung des Rückgabewertes?

Code:
bezeichnung := stringreplace(bezeichnung,'ä','ae',[rfReplaceAll, rfIgnoreCase]);
und ü hat den Ordinalwert #252, das ist dann auch ok.
hab ich natürlich gemacht, sorry wenn ich das nicht so rüber brachte.
das ä wurde aber trotzdem nicht durch ae ersetzt
Karl-Heinz
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Umlaute in string erstetzen

  Alt 10. Nov 2012, 12:44
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;
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Umlaute in string erstetzen

  Alt 10. Nov 2012, 12:47
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Umlaute in string erstetzen

  Alt 10. Nov 2012, 12:48
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,
Karl-Heinz
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Umlaute in string erstetzen

  Alt 10. Nov 2012, 12:49
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.
Heißt ich muss erst nach UTF8 umwandeln?

EDIT: super, so funktionierts

Ich danke euch
Karl-Heinz

Geändert von khh (10. Nov 2012 um 12:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Umlaute in string erstetzen

  Alt 10. Nov 2012, 13:02
Heißt ich muss erst nach UTF8 umwandeln?

EDIT: super, so funktionierts
Bei FP/Lazaraus musst du eigentlich immer zuerst mal schauen obs mit einem UTF8 oder mit einem ANSI-String klappt. So wie es ausschaut gibt dort eine munteren Mix aus String-Codierung der benötigt wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Umlaute in string erstetzen

  Alt 10. Nov 2012, 13:08
Ich danke euch
Karl-Heinz
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: Umlaute in string erstetzen

  Alt 10. Nov 2012, 14:22
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}
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz