AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

=E2=80=9E umwandeln

Ein Thema von josefkoller · begonnen am 11. Feb 2014 · letzter Beitrag vom 12. Feb 2014
Antwort Antwort
Seite 2 von 2     12   
josefkoller

Registriert seit: 22. Okt 2012
49 Beiträge
 
#11

AW: =E2=80=9E umwandeln

  Alt 12. Feb 2014, 10:36
Hallo,

ich hole mir für meine Probiererei Mails von meinem Mailserver.

Ich hab jetzt besagte Mail mal in meinem Thunderbird gesucht.

Das Blöde ist, daß dort auch besagte Fragezeichen gefunden und interpretiert werden.
Die Thunderbird Leute müssen also irgendeine Funktionen benutzen, die sowas findet.

Der Quelltext kommt bei beiden (also bei meinem pop3 und in Thunderbird) gleich an.

In Thunderbird Quelltext6 steht z. B. =D6 für "Ö", bei mir auch.

Bei Thunderbird kommt dann in der Ansicht ein "Ö" raus, bei mir ein "?".

Die bei Thunderbird bekommen es hin und ich nicht. Das ärgert mich.

Vielleicht doch noch eine Idee??

Danke

Josef

Und noch was:
Der Sender ist ein MacRechner. Das Sonderzeichen dieser Mail für "ä" lautet: =E4. In den anderen Quelltexten steht für ä, =C3=A4.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: =E2=80=9E umwandeln

  Alt 12. Feb 2014, 13:25
Ein einzelnes =D6 ist nunmal kein gültiges UTF-8-Zeichen

Hat der Thunderbird da eventuell eine andere Codierung angegeben?
#$D6 bzw. #214 ist das Ö in den meisten deutschen ANSI-Kodierungen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#13

AW: =E2=80=9E umwandeln

  Alt 12. Feb 2014, 14:04
Mit sowas hatte ich auch schon mal zu kämpfen, allerdings in PHP. Es scheint bei Mails leider häufiger vorzukommen, dass sie falsch enkodiert sind, als umgekehrt. Es bleibt einem kaum etwas anderes übrig, als mit Heuristiken zu arbeiten (bzw. entsprechende Bibliotheken zu verwenden).
  Mit Zitat antworten Zitat
josefkoller

Registriert seit: 22. Okt 2012
49 Beiträge
 
#14

AW: =E2=80=9E umwandeln

  Alt 12. Feb 2014, 14:49
Hallo,

bei meinem aktuellen Problem hab ich es jetzt so gemacht:

Delphi-Quellcode:
...
pop.RetrStream(i, retrStream);
      retrStream.Position := 0;
      mess.Lines.LoadFromStream(retrStream);
      mess.Lines.Text:=replaceUmlaute(mess.Lines.Text);
      mess.Lines.Text:=DecodeQuotedPrintable(mess.Lines.Text);
...
Delphi-Quellcode:
function replaceUmlaute(Text: string): string;
begin
  Text := StringReplace(Text, '=F6', 'ö', [rfReplaceAll]);
  Text := StringReplace(Text, '=D6', 'Ö', [rfReplaceAll]);
  Text := StringReplace(Text, '=FC', 'ü', [rfReplaceAll]);
  Text := StringReplace(Text, '=DF', 'ß', [rfReplaceAll]);
  Text := StringReplace(Text, '=E4', 'ä', [rfReplaceAll]);
  Text := StringReplace(Text, '=C4', 'Ä', [rfReplaceAll]);
  Text := StringReplace(Text, '=DC', 'Ü', [rfReplaceAll]);
  Result := Text;
end;
Also erst wird nach diesen "falschen" =D6 gesucht und ersetzt (mit function replaceUmlaute)und dann mit function DecodeQuotedPrintable aus synacode.pas die "richtigen" HEX Werte, also die =C3=B6, usw. umgewandelt.

diese Reihenfolge ist notwendig, sonst klappt es wieder nicht!


Dann schaut es gut aus. Ich werd mal noch ein paar andere Mails damit laden. Wahrscheinlich tauchen noch andere Werte auf. Die müßte ich dann halt auch noch in meine funktion reinschreiben. Oder vielleicht gleich die ganze Zeichensatztabelle??

Nur ...welche? Was ist denn das für ein Zeichensatz, der =F6,=D6, usw. definiert???

Danke.

Josef

P.S.
Ein weiteres Problem sind Mails, die mit der PHP Mail funktion verschickt werden.
Bei php mail() reicht es, ein from und ein to anzugeben.

Du findest dann kein Date oder keine Message-ID im Kopf usw. Auch kann "Message-Id" oder "Message-ID" im Header geschrieben werden, um die Werte zu definieren. usw.

Mit anderen Worten:
Ich habe es mir viel einfacher vorgestellt,meinen eigenen pop client zu machen.

In einem anderen Post hab ich gefragt, wie ich ein Datum in Form von "Mon, 3 Feb 2014 02:57:08 +0100 (CET)" im Headertext finden kann (also kein Date: davor).

Bisher keine Antworten. Ich weiß es auch nicht.

vielleicht dazu eine Idee???
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#15

AW: =E2=80=9E umwandeln

  Alt 12. Feb 2014, 15:40
Nur ...welche? Was ist denn das für ein Zeichensatz, der =F6,=D6, usw. definiert???
Gar keiner. Es ist nur eine Schreibweise, um Byte-Werte zu kodieren. Wie diese Bytewerte zu interpretieren sind, ob als ANSI, als UTF-8 usw., darüber kann man ohne weitere Informationen keine Aussage machen.

Theoretisch müsste im Header der E-Mail das korrekte Encoding angegeben sein, darauf kann man sich aber nur bedingt verlassen.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#16

AW: =E2=80=9E umwandeln

  Alt 12. Feb 2014, 16:39
Also erst wird nach diesen "falschen" =D6 gesucht und ersetzt (mit function replaceUmlaute)und dann mit function DecodeQuotedPrintable aus synacode.pas die "richtigen" HEX Werte, also die =C3=B6, usw. umgewandelt.

diese Reihenfolge ist notwendig, sonst klappt es wieder nicht!
Bist Du Dir da ganz sicher?
Eigentlich sollte erst die Dekodierung der 3Byte und 2Byte Sequenzen erfolgen und dann zum Schluß der Rest der übrig bleibt. Bei Deiner Vorgehensweise kann es sein, daß in einer Sequenz die mehrere Bytes enthält eine Falschinformation eingefügt wird.

Zitat:
Es ist nur eine Schreibweise, um Byte-Werte zu kodieren. Wie diese Bytewerte zu interpretieren sind, ob als ANSI, als UTF-8 usw., darüber kann man ohne weitere Informationen keine Aussage machen.


Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#17

AW: =E2=80=9E umwandeln

  Alt 12. Feb 2014, 16:50
Nur ...welche? Was ist denn das für ein Zeichensatz, der =F6,=D6, usw. definiert???
Gar keiner. Es ist nur eine Schreibweise, um Byte-Werte zu kodieren. Wie diese Bytewerte zu interpretieren sind, ob als ANSI, als UTF-8 usw., darüber kann man ohne weitere Informationen keine Aussage machen.

Theoretisch müsste im Header der E-Mail das korrekte Encoding angegeben sein, darauf kann man sich aber nur bedingt verlassen.
Es ist DOS-Westeuropäisch, AFAIR Codepage 451
  Mit Zitat antworten Zitat
josefkoller

Registriert seit: 22. Okt 2012
49 Beiträge
 
#18

AW: =E2=80=9E umwandeln

  Alt 12. Feb 2014, 20:28
[QUOTE=Es ist DOS-Westeuropäisch, AFAIR Codepage 451[/QUOTE]

Dank für den Hinweis. DOS-Westeuropäisch ist 850. die ist es aber auch nicht.
Dafür hab ich DOS-mitteleuropäisch 852 gefunden. die scheint zu passen.

Die kann auch mit den synapse funktionen angewandt werden.

Nur, im Ergebnis haben dann die anderen Mails wieder fehlerhafte Zeichen drin.

Das Einzige was bisher hilft, ist mein eigenes String Replace.

Ich schreib da jetzt mal noch einige Zeichen aus der CP 852 rein und dann muß es passen.

Danke für die Hinweise und für die Geduld.

Josef
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:23 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