![]() |
Indy und UTF-8 Betreff
Hi leutz,
hab ein Problem mit Indy 10. Und zwar geht es um codierte Betreffzeilen in E-Mails. Nachdem ich einen Bug in Indy gelöst habe, decodiert Indy jetzt richtig ISO Codierungen, allerdings lässt er UTF-8 Codierungen in Ruhe. Dann kommen dort solche Betreffs wie dieser zurück: =?utf-8?Q?AW:_Neues_Projekt_Sch=C3=BCrn_Warenwirtschaft_ ?= Wie kriege ich diesen nun umcodiert in einen AnsiString?, sprich: AW: Neues Projekt Schön Warenwirtschaft Interessant ist auch, dass Indy eigentlich diese umcodierung kann. Da der Bodytext als echter UTF-8 String ankommt, den ich dann zur anzeige nurnoch mit UTF8ToAnsi umcodieren muss. Indy scheint das nur bei Betreffs nicht anzuwenden. Jemand eine Idee? greetz Steffen |
Re: Indy und UTF-8 Betreff
Ich kann Dir leider Deine Frage nicht beantworten, aber kannst Du mir verraten, wie Du den Bug in Indy gelöst hast?
Romy |
Re: Indy und UTF-8 Betreff
Hi MasterEvil,
ja ja, auch Indy 10 ist (leider immer noch nicht) fehlerfrei :-( Du solltest dir mal die JEDI-Unit ( ![]() Hier gibt es u. a. function UTF8ToWideString(S: AnsiString): WideString; Bye Ollo |
Re: Indy und UTF-8 Betreff
Hallo ;)
hab das Problem bereits selber gelöst. UT8ToWideString bringt in diesem Fall auch nichts, da es ja nur eine Codierung ist um es zu versenden ;) @Samashy Das Problem mit der ISO Codierung kannst du lösen, indem du in der Unit IdCoderHeader in der Methode DecodeHeader diesen Block änderst:
Code:
Dadrauf achten, dass du den Block mit dem "encodingendpos:=PosIdx('?=', UpperCase(Header),encodingendpos+1);" nimmst.
if EncodingFound then
begin encodingendpos:=PosIdx('?=', UpperCase(Header),encodingendpos+1); {Do not Localize} if encodingendpos > 0 then begin for i := LEncodingStartPos to encodingendpos-1 do begin //if CharIsInSet(Header, i, Whitespace) then begin <-- diese Zeile if CharIsInSet(Header, i, [#9,#10,#13]) then begin <-- durch diese ersetzen EncodingFound := false; break; end; end; Da ist noch ein weiterer, der fast genauso aussieht. Das Problem mit den UTF8 Subjects ist da nicht ganz so leicht zu lösen, da Indy hat der DecodeHeader stelle dort selber nichts vorsieht. Allerdings besitzt Indy eine Klasse um diese Strings (jedenfalls ohne den Header) zu decodieren. Ich habe mir deswegen zwei Methoden gebaut:
Code:
Im Uses Block muss man dafür die Unit IdCoderQuotedPrintable zusätzlich einbinden.
function MailsGetSubject(Subject: String): String;
var Decoder : TIdDecoderQuotedPrintable; TextAnsi : String; begin Result:=Subject; if Pos('=?utf-8',Subject)<>0 then begin Decoder:=TIdDecoderQuotedPrintable.Create; try Result:=DeleteUTF8ControlStrings(Subject); Result:=Decoder.DecodeString(Result); TextAnsi:=UTF8ToAnsi(Result); if Length(TextAnsi)>0 then Result:=TextAnsi; finally FreeAndNil(Decoder); end; end; end; function DeleteUTF8ControlStrings(Text: String): String; var Encoded : String; Dump : String; StartPos : Integer; EndPos : Integer; begin Encoded:=''; Dump:=Text; while Pos('=?UTF-8',StrUpper(Dump))<>0 do begin StartPos:=Pos('=?UTF-8',StrUpper(Dump))+10; EndPos:=Pos('?=',StrUpper(Dump)); Encoded:=Encoded+Copy(Dump,StartPos,EndPos-StartPos); Dump:=Encoded+Copy(Dump,EndPos+3,Length(Dump)-(EndPos+2)); end; Result:=StrTrim(StrChangeCh(Encoded,'_',' ')); end; Vielleicht hilfts ja wem ;) Kleine Anmerkung: DeleteUTF8ControlStrings löscht die =?utf-8?Q? und ?= Zeichen und baut auch mehrere zusammengesetzte utf8 codierte Strings wieder zu einem Zusammen. Dabei wird das ?Q? bzw ?B? ignoriert. ?B? bedeuted, dass das Subject noch zusätzlich Base64 Decodiert wird. greetz Steffen |
Re: Indy und UTF-8 Betreff
Ich habe das mit dem ISO BUG versucht, aber bei erscheint es immernoch falsch...
=?ISO-8859-1?Q?K=FCndigungsr=FCcknahme_000,_AGENTUR_000000?= Hast Du eine Idee? Der Rest funktioniert. Romy |
Re: Indy und UTF-8 Betreff
mhh, eigentlich sollte das gehn.
Hast du vielleicht doch das ganze im falschen Block ersetzt? Da sind ja zwei Blöcke die sich nur um ein ? unterscheiden. greetz Steffen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:08 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 by Thomas Breitkreuz