![]() |
Zeichenkette durch Umlaut ersetzen
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', ''); |
AW: Zeichenkette durch Umlaut ersetzen
Welche Delphi-Version?
Kannst du ein minimales Beispielprogramm lieder, das dieses Verhalten zeigt? |
AW: Zeichenkette durch Umlaut ersetzen
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; ![]() |
AW: Zeichenkette durch Umlaut ersetzen
Hmm..
Bei dieser Zeichenfolge ('\u00e4') scheint es sich um escaped JSON-String zu handeln. Schau mal hier: ![]() 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.. |
AW: Zeichenkette durch Umlaut ersetzen
Zitat:
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; |
AW: Zeichenkette durch Umlaut ersetzen
Hallo,
Zitat:
Delphi-Quellcode:
Aber ja, ich würde auch eine lokale Variable benutzen, schon wegen der besseren Übersicht und Debugbarkeit.
s= '';
s:= s+'a'+'b'; |
AW: Zeichenkette durch Umlaut ersetzen
Zitat:
Also alles legitim. |
AW: Zeichenkette durch Umlaut ersetzen
Zitat:
Delphi-Quellcode:
usw war es mir schon klar, aber halt beim StringManipulator() nicht. Danke DieDolly!
s := s+'1'+s+'2'
|
AW: Zeichenkette durch Umlaut ersetzen
Zitat:
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
Delphi-Quellcode:
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 :cry:)
s := s + '1' + s + '2';
Delphi-Quellcode:
s := Concat(s, '1', s, '2');
|
AW: Zeichenkette durch Umlaut ersetzen
offtopic
Zitat:
Ein Plus Kommando ist schneller und hat nicht solche Restriktionen wobei wenn überhaupt eh das selbe hinten rauskommt :?: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 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