Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi UTF ä und ß hintereinander , ß wird nicht encoded (https://www.delphipraxis.net/197902-utf-ae-und-ss-hintereinander-ss-wird-nicht-encoded.html)

Samashy 17. Sep 2018 15:09


UTF ä und ß hintereinander , ß wird nicht encoded
 
Ich erhalte eine Email mit einem UTF codierten Betreff: '=?UTF-8?Q?Planm=C3=A4=C3=9Fige_Erh=C3=B6hung_xx-xx-xx?=

Code:
while Pos('=?UTF-8',Dump)<>0 do
   begin
     StartPos:=Pos('=?UTF-8',Dump)+10;
     EndPos:=PosEx('?=',Dump,startpos+10);
     Encoded:=Encoded+Copy(Dump,StartPos,EndPos-StartPos);
     Dump:=Encoded+Copy(Dump,EndPos+3,Length(Dump)-(EndPos+2));
   end;
   Result:=Encoded;
Ich entferne die UTF ControllStrings und benutze dann TIdDecoderQuotedPrintable
Code:
 
Decoder :=TIdDecoderQuotedPrintable.Create;
versuch1:=Decoder.DecodeString(TRIM(betreff));
ergebnis:=UTF8ToWideString(versuch1);
Ergebnis:
versuch1 = 'PlanmäÃ'#$009F'ige_Erhöhung_xx-xx-xx'
ergebnis = 'Planmä�?ige_Erhöhung_xx-xx-xx'

Was mache ich falsch? ß wird einfach nicht gewandelt, obwohl es meiner Meinung nach richtig geliefert wird. (=C3=9F)

hoika 17. Sep 2018 17:25

AW: UTF ä und ß hintereinander , ß wird nicht encoded
 
Hallo,
was passiert, wenn Du das ä mal wegläßt.
Und wie hast Du die einzelnen String-Variablen definiert (welcher Typ genau)?

Schokohase 17. Sep 2018 19:38

AW: UTF ä und ß hintereinander , ß wird nicht encoded
 
Man sollte das entsprechende RFC Dokument lesen. Dort wird dann alles erklärt.

RFC2047: MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text

Es gibt auch einen Online-Decoder, damit man sehen kann, was denn bei
Code:
=?UTF-8?Q?Planm=C3=A4=C3=9Fige_Erh=C3=B6hung_xx-xx-xx?=
herauskommen sollte
Code:
Planmäßige Erhöhung xx-xx-xx

hoika 17. Sep 2018 20:59

AW: UTF ä und ß hintereinander , ß wird nicht encoded
 
Hallo,
das löst doch aber nicht das Problem des TE?
Wo ist denn die Antwort auf seine Frage?

PS: Ich persönlich finde die RFC's einfach nur schrecklich zu lesen.

Harry Stahl 17. Sep 2018 22:47

AW: UTF ä und ß hintereinander , ß wird nicht encoded
 
Zitat:

Zitat von Samashy (Beitrag 1413389)
Ich erhalte eine Email mit einem UTF codierten Betreff: '=?UTF-8?Q?Planm=C3=A4=C3=9Fige_Erh=C3=B6hung_xx-xx-xx?=

Code:
while Pos('=?UTF-8',Dump)<>0 do
   begin
     StartPos:=Pos('=?UTF-8',Dump)+10;
     EndPos:=PosEx('?=',Dump,startpos+10);
     Encoded:=Encoded+Copy(Dump,StartPos,EndPos-StartPos);
     Dump:=Encoded+Copy(Dump,EndPos+3,Length(Dump)-(EndPos+2));
   end;
   Result:=Encoded;
Ich entferne die UTF ControllStrings und benutze dann TIdDecoderQuotedPrintable
Code:
 
Decoder :=TIdDecoderQuotedPrintable.Create;
versuch1:=Decoder.DecodeString(TRIM(betreff));
ergebnis:=UTF8ToWideString(versuch1);
Ergebnis:
versuch1 = 'PlanmäÃ'#$009F'ige_Erhöhung_xx-xx-xx'
ergebnis = 'Planmä�?ige_Erhöhung_xx-xx-xx'

Was mache ich falsch? ß wird einfach nicht gewandelt, obwohl es meiner Meinung nach richtig geliefert wird. (=C3=9F)

Versuch mal:
Delphi-Quellcode:
Decoder := TIdDecoderQuotedPrintable.Create;
versuch1:= Decoder.DecodeString(TRIM(betreff), IndyTextEncoding_UTF8);

Schokohase 17. Sep 2018 23:47

AW: UTF ä und ß hintereinander , ß wird nicht encoded
 
@hoika

Nun ja, wer die RFCs liest, der bekommt z.B. mit, dass dieser Text folgende Bedeutung hat:
Code:
=?<charset>?<encoding>?<encoded-text>?=
Da fest vorauszusetzen, dass es sich beim Charset immer um UTF-8 handelt oder beim Encoding immer um QuotedPrintable, ist halt ein vorprogrammierter Knieschuss.

Des weiteren wird bei QuotedPrintable im Header ein Leerzeichen durch =20 ersetzt oder durch den Unterstrich _.

Damit hat man sozusagen alles zusammen um das Problem mit ein paar Zeilen universal zu lösen.

hoika 18. Sep 2018 06:17

AW: UTF ä und ß hintereinander , ß wird nicht encoded
 
Hallo,
du meinst also, dass zwar UTF8 im Betreff drinsteht,
es aber selbst kein UTF8 ist.

Schokohase 18. Sep 2018 07:45

AW: UTF ä und ß hintereinander , ß wird nicht encoded
 
Nun, ich würde sagen, dass bei dieser Mail
Zitat:

Zitat von Samashy (Beitrag 1413389)
Ich erhalte eine Email mit einem UTF codierten Betreff: '=?UTF-8?Q?Planm=C3=A4=C3=9Fige_Erh=C3=B6hung_xx-xx-xx?=

der Betreff mit dem Charset UTF-8 und QuotedPrintable codiert ist.

Und bei der nächsten Mail? Die kann mit irgendeinem Charset und Base64 kodiert sein.
Code:
From: =?US-ASCII?Q?Keith_Moore?= <moore@cs.utk.edu>
To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>
CC: =?ISO-8859-1?Q?Andr=E9?= Pirard <PIRARD@vm1.ulg.ac.be>
Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
Natürlich kann ich das jetzt falsch verstanden haben und der TE will ein Programm schreiben, das nur diese eine Mail bearbeiten wird. Dann hättest du natürlich Recht.

Samashy 18. Sep 2018 07:48

AW: UTF ä und ß hintereinander , ß wird nicht encoded
 
Zitat:

Zitat von Harry Stahl (Beitrag 1413431)
Versuch mal:
Delphi-Quellcode:
Decoder := TIdDecoderQuotedPrintable.Create;
versuch1:= Decoder.DecodeString(TRIM(betreff), IndyTextEncoding_UTF8);

Vielen Dank, das funktioniert.


Danke für die schnellen Hinweise von allen hier.

Samashy 18. Sep 2018 07:51

AW: UTF ä und ß hintereinander , ß wird nicht encoded
 
Zitat:

Natürlich kann ich das jetzt falsch verstanden haben und der TE will ein Programm schreiben, das nur diese eine Mail bearbeiten wird. Dann hättest du natürlich Recht.
In dem Fall ist es tatsächlich so, dass die Mail immer vom selben Absender kommt und man sich auf UTF8 geeinigt hat.

Hab vielen Dank für Deinen Lösungsweg, werde ich beherzigen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:08 Uhr.
Seite 1 von 2  1 2      

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