AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy und UTF-8 Betreff
Thema durchsuchen
Ansicht
Themen-Optionen

Indy und UTF-8 Betreff

Ein Thema von MasterEvil · begonnen am 13. Feb 2006 · letzter Beitrag vom 1. Mär 2006
Antwort Antwort
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#1

Indy und UTF-8 Betreff

  Alt 13. Feb 2006, 10:58
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
  Mit Zitat antworten Zitat
Benutzerbild von Samashy
Samashy

Registriert seit: 20. Feb 2004
Ort: Cottbus
127 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Indy und UTF-8 Betreff

  Alt 27. Feb 2006, 11:52
Ich kann Dir leider Deine Frage nicht beantworten, aber kannst Du mir verraten, wie Du den Bug in Indy gelöst hast?

Romy
  Mit Zitat antworten Zitat
OlloSoft

Registriert seit: 11. Mai 2004
14 Beiträge
 
#3

Re: Indy und UTF-8 Betreff

  Alt 28. Feb 2006, 09:18
Hi MasterEvil,

ja ja, auch Indy 10 ist (leider immer noch nicht) fehlerfrei :-(

Du solltest dir mal die JEDI-Unit (Project Jedi - Home) JCLUNicode.pas ansehen.

Hier gibt es u. a.
function UTF8ToWideString(S: AnsiString): WideString;



Bye Ollo
Ollo
Sei respektvoll, denn du weißt nie, ob wir uns nicht mal persönlich begegnen
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Indy und UTF-8 Betreff

  Alt 28. Feb 2006, 11:40
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:
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;
Dadrauf achten, dass du den Block mit dem "encodingendpos:=PosIdx('?=', UpperCase(Header),encodingendpos+1);" nimmst.
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:
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;
Im Uses Block muss man dafür die Unit IdCoderQuotedPrintable zusätzlich einbinden.

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
  Mit Zitat antworten Zitat
Benutzerbild von Samashy
Samashy

Registriert seit: 20. Feb 2004
Ort: Cottbus
127 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Indy und UTF-8 Betreff

  Alt 1. Mär 2006, 10:57
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
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Indy und UTF-8 Betreff

  Alt 1. Mär 2006, 11:20
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:22 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