AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Zeichenkette durch Umlaut ersetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichenkette durch Umlaut ersetzen

Ein Thema von AWilhelm · begonnen am 3. Aug 2018 · letzter Beitrag vom 3. Aug 2018
Antwort Antwort
Seite 1 von 2  1 2      
AWilhelm

Registriert seit: 3. Aug 2018
1 Beiträge
 
#1

Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 10:43
Hallo zusammen,

ich möchte einen Text aus einer INI-Datei auslesen und diesen in ein TEdit-Feld schreiben. Zusätzlich soll vorher in dem Text die Zeichenfolge "\u00e4" durch ein "ä" ersetzt werden. In dem Textfeld wird dann aber statt des "ä" ein "?" angezeigt.


Delphi-Quellcode:
//------------------------------------------------------------------------------------------------------------------------------------------------------------
function GetIniStr( iniFilename, iniSect, IniEntry, iniDefault : string ) : string;
//------------------------------------------------------------------------------------------------------------------------------------------------------------
var inifile : TMemIniFile;
begin
   result := inidefault;
   inifile := TMemIniFile.create( iniFilename );
   try
      result := inifile.ReadString( iniSect, IniEntry, iniDefault );
      result := StringReplace(result, '\u00e4', 'ä', [rfReplaceAll]);
   finally
      inifile.Free;
   end;
end;

txtSuchdatum.Text := GetIniStr('config.ini', 'Testsection', 'TestEntry', '');
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 10:48
Welche Delphi-Version?

Kannst du ein minimales Beispielprogramm lieder, das dieses Verhalten zeigt?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 13:10
Beispielprogramm: Das wäre dann vermutlich ANSI und nicht auf einem deutschen Windows kompiliert.
Also grundsätzlich funktioniert dieser Code, außer der Stringinhalt wird irgendwo durch eine Codepage gejagt, welche keine deutschen Umlaute kennt.



Abgesehn von dem grundsätzlichen Problem, welches erstmal gelöst werden muß.

Was passiert, wenn du auch ein ü bauchst und dann das ö, Ö, &, á oder 湜?
Ich hätte gedacht, dass z.B. in den Indy irgenwo eine Decodier-Funktion für sowas versteckt wäre, die man hätte nutzten können (fand auf die Schnelle nichts),
aber notfalls ginge auch sowas
Delphi-Quellcode:
Result := TRegEx.Replace(Result, '\\u[0-9a-f]{4}', MyReplace);

function TXxxx.MyReplace(const Match: TMatch): string;
begin
  Result := Char(StrToInt('$' + Copy(Match.Value, 3)));
end;
Delphi-Referenz durchsuchenRegularExpressions
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Aug 2018 um 13:13 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#4

AW: Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 14:02
Hmm..

Bei dieser Zeichenfolge ('\u00e4') scheint es sich um escaped JSON-String zu handeln.

Schau mal hier:
https://stackoverflow.com/questions/...8-escaped-text

dort gibt es ein Unescape, welches dein Problem lösen sollte.

Statt

result := StringReplace(result, '\u00e4', 'ä', [rfReplaceAll]);

dann einfach

result := Unescape(result);

Es würden dann auch gleich alle anderen Zeichen ('üöä') berücksichtigt..
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 18:32
result := StringReplace(result, '\u00e4', 'ä', [rfReplaceAll]);
Ist das echt legitim, einen String mit sich selbst ändern zu wollen? Hab es noch nicht getestet aber ich würde es eher so machen:
Delphi-Quellcode:
function GetIniStr( iniFilename, iniSect, IniEntry, iniDefault : string ) : string;
var inifile : TMemIniFile;
    s: String;
begin
   s := inidefault;
   inifile := TMemIniFile.create( iniFilename );
   try
      s := inifile.ReadString( iniSect, IniEntry, iniDefault );
      result := StringReplace(s, '\u00e4', 'ä', [rfReplaceAll]);
   finally
      inifile.Free;
   end;
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 19:19
Hallo,
Zitat:
Ist das echt legitim
Warum soll das nicht gehen?

Delphi-Quellcode:
s= '';
s:= s+'a'+'b';
Aber ja, ich würde auch eine lokale Variable benutzen, schon wegen der besseren Übersicht und Debugbarkeit.
Heiko
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 20:17
result := StringReplace(result, '\u00e4', 'ä', [rfReplaceAll]);
Ist das echt legitim, einen String mit sich selbst ändern zu wollen?
Wo man mit der CE-Version endlich die Quellcodes ansehen kann, sieht man, dass StringReplace intern Source in eine Zwischenvariable speichert.
Also alles legitim.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 20:22
result := StringReplace(result, '\u00e4', 'ä', [rfReplaceAll]);
Ist das echt legitim, einen String mit sich selbst ändern zu wollen?
Also alles legitim.
Ja genau daran hatte es gerade gehappert, kein Delphi zur Hand, für s := s+'1'+s+'2' usw war es mir schon klar, aber halt beim StringManipulator() nicht. Danke DieDolly!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#9

AW: Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 21:29
Ist das echt legitim, einen String mit sich selbst ändern zu wollen?
Warum nicht?

Delphi-Strings sind referenzgezählt
und bei Änderung greift ein automatisches CopyOnWrite.

Also die "Kopie" in dem Parameter behält die Referenz und für das Result wird ein neuer String erstellt und da dann reingegeben.

PS: Auch s := s + '1' + s + '2'; ist eigentlich ein Funktionsaufruf, für den sich in der System-Unit ein paar Funktionen verstecken. (mit bissl CompilerMagic für Funktionen mit einer unbestimmten Anzahl an Parametern, welche man leider nicht für eigene Funktionen verwenden darf )
s := Concat(s, '1', s, '2');
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Aug 2018 um 21:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Zeichenkette durch Umlaut ersetzen

  Alt 3. Aug 2018, 21:43
offtopic
s := Concat(s, '1', s, '2');
Naja, es gibt auch Funktionen deren Sinnhaftigkeit mir bisweilen nicht ersichtlich wird.
Ein Plus Kommando ist schneller und hat nicht solche Restriktionen wobei wenn überhaupt eh das selbe hinten rauskommt
Gruß vom KodeZwerg
  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 02:57 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