UTF-8 äöüÄöü ß

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

UTF-8 äöüÄöü ß

Beitrag von AUGE_OHR »

hi,

mit der neuen Forumsoftware hab ich Problem mit dem "Subject" der Email.

Ich habe eine Xbase++ / SEE32 Anwendung die mir die "Überschriften" (Header)
vom POP3 Server holt und mir die in einem XbpBrowse anzeigt wo die dann
markiert werden welche SPAM sind und vom POP3 Server gelöscht werden sollen.

Während OE & Co. die "Subject" Zeile lesebar anzeigt, erhalte ich mit meinem
Xbase++ SPAM Blocker nur irgendwas mit UTF-8
Subject: =?UTF-8?B?QmVuYWNocmljaHRpZ3VuZyDDvGJlciBuZXVlIEFudHdvcnQg4oCUIOKAnk5ldWUg?= =?UTF-8?B?Rm9yZW5zb2Z0d2FyZeKAnA==?=
From: <post@xbaseforum.de>
das soll heissen : Benachrichtigung über neue Antwort — „Neue Forensoftware“

man kann es auch sehen, bei OE -> Eigenschaften -> Quellcode
Und was Dein Subject anbelangt: Das musst Du umwandeln mit UTF8->ANSI.
Entsprechende Beispiele dazu findest Du in der Alaska-Newsgroup.
hab ich getan, aber ich komme nicht weiter ...

Frage : ist Mein Beispiel überhaupt UTF-8 ?

auch scheint mir das die Jungs es eher "andersrum" gebrauchen (deutsch -> blabla)
sodas ich auch mit folgenden nicht klar komme :

Code: Alles auswählen

#INCLUDE "DLL.CH"

PROCEDURE MAIN
LOCAL cUTF8 := "=?UTF-8?B?QmVuYWNocmljaHRpZ3VuZyDDvGJlciBuZXVlIEFudHdvcnQg4oCUIOKAnk5ldWUg?= =?UTF-8?B?Rm9yZW5zb2Z0d2FyZeKAnA==?="

LOCAL cMBtoW
LOCAL cWToMB
LOCAL nWideChars
LOCAL cPlainUnicode
LOCAL nCodepage
LOCAL nBytes
LOCAL cAnsi

/*
Guenter Beyes
Freitag, 10. M㱺 2006 12:10
public.xbase++.generic
Re: UTF-8 conversion
*/

// UTF-8 code-page identifier.
#DEFINE CP_UTF8 65001
/*

hier fängt es schon an ... wie/was/wo identifier
ich möchte UTF-8 -> deutsch

*/

cMBtoW := DllPrepareCall( "kernel32.dll", DLL_STDCALL, "MultiByteToWideChar" )

cWToMB := DllPrepareCall( "kernel32.dll", DLL_STDCALL, "WideCharToMultiByte" )

// First convert UTF-8 to plain Unicode:

// Add string terminator just to be safe.
cUTF8 += chr(0)

// Get number of resulting wide characters.
nWideChars := DllExecuteCall( cMBtoW, CP_UTF8, 0, cUTF8, -1, 0, 0 )

// Provide a sufficient buffer.
cPlainUnicode := space( 2*(nWideChars + 1) )

// Do the conversion.
nWideChars := DllExecuteCall( cMBtoW, CP_UTF8, 0, cUTF8, -1,;
                              @cPlainUnicode, nWideChars+1 )

// Strip Unicode string terminator.
// (NOT, because it's needed in the  next step. )
// cPlainUnicode := left( cPlainUnicode, 2*(nWideChars - 1) )

// Now convert plain Unicode to ANSI,
// using the current ANSI code page:

// Get current ANSI code-page identifier.

nCodepage := DllCall( "kernel32.dll", DLL_STDCALL, "GetACP" )

// Get number of resulting bytes.
nBytes   := DllExecuteCall( cWToMB, nCodepage, 0, cPlainUnicode, -1,;
                            0, 0, 0, 0 )

// Provide a sufficient buffer.
cAnsi   := space( nBytes + 1 )

// Do the conversion.
nBytes   := DllExecuteCall( cWToMB, nCodePage, 0, cPlainUnicode, -1,;
                            @cAnsi, nBytes+1, 0, 0 )

// Strip ANSI string terminator.
cAnsi := left( cAnsi, nBytes - 1 )

// Finito.

? cAnsi     // -> cUTF8

RETURN
ich denke mal irgendwie liege ich wohl "daneben" ...

so ich werde es jetzt mal mit Pablos ot4xb versuchen.
... aber trotzdem wüsste ich gerne wie es "funktioniert"
Zuletzt geändert von AUGE_OHR am Mi, 17. Sep 2008 4:13, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von brandelh »

Tja wer wüßte das nicht gerne ;-)

Ich weiß, dass auch in ANSI Nachrichten bei einigen InternetProtokollen bei (Sonder)zeichen eine Codierung vorkommt (Sonderzeichen -> %ASC-Code oder base64 oder so).

Eventuell ist das hier ja auch so.
In der Win32 API müssten Funktionen drinn sein, die ANSI nach UNICODE und zurück konvertieren, aber ist das UTF-8 jetzt UNICODE ... ?
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von Martin Altmann »

Hallo Hubert,
nein - UTF-8 hat nichts mit Unicode zu tun...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von hschmidt »

Hallo Martin,

da ist Wikipedia aber anderer Meinung: :wink:

http://de.wikipedia.org/wiki/UTF_8

Hans
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von Martin Altmann »

Hallo Hans,
nun können wir gerne Haare spalten :D
Unicode ist Unicode und UTF-8 ist UTF-8.
UTF-8 ist eine Sonderzeichenfreie Kodierung des Unicodezeichensatzes, damit es gefahrlos (im Sinne von verlustfrei) im Internetverkehr genutzt werden kann.
Das ist im Prinzip nichts anderes, als ein uu-encode oder ein im HTML-Umfeld gerne gemachtes "escapen" von Sonderzeichen (z.B. %20 für ein Leerzeichen).
Also insofern war ich vielleicht etws voreilig mit meiner Aussage, dass es nichts mit Unicode zu tun hätte.
Fakt ist: UTF-8 muß erst umgewandelt werden, bevor die Unicode-Zeichen (oder ANSI) angezeigt werden können.
Im Falle von Jimmy sind genau die Umlaute im Betreff das Problem, weshalb es UTF-8-codiert wird.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von brandelh »

Hi,
UTF-8 (Abk. für 8-bit Unicode Transformation Format) ist die am weitesten verbreitete Kodierung für Unicode-Zeichen.
das merke ich mir :D

bleibt jetzt nur noch die Frage, ob es schon eine Umsetzfunktion gibt, oder ob wir die selbst nach der Beschreibung zusammenbasteln müssen ... UND ob wir das mit ANSI Xbase++ überhaupt können :?:

In AsiNet ist kein UTF-8 Konverter hinterlegt.

Am einfachsten wäre es sicher den Meldungstext im Forum so zu ändern, dass man keine Umlaute mehr braucht ;-)
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von Martin Altmann »

Hallo Hubert,
schau Dir die Tools von Pablo Botella an - da sollen solche Funktionen drin sein:
OEM2UTF()
UTF2OEM()
ANSI2UTF()
UTF2ANSI()

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von brandelh »

Hi,

seine Hauptdll ot4XB.DLL habe ich indirekt in Verwendung mit XbpPDF...
... aber jetzt wo du es sagst, eventuell kann ich das für den MonthView benötigen :idea:

Jimmy brauchte die UTF2 Konvertierung, ich nehme FireFox und Thunderbird :D
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von Martin Altmann »

Hallo Hubert,
schon richtig, dass Jimmy das brauchte - aber Du hast ja zuletzt gefragt, ob es das schon gibt.
Und ja, das gibt es.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von brandelh »

Hallo Martin,

ich habe eben die Online-Doku von ot4XB.DLL durchgesehen und nichts zu UTF gefunden.
Hast du eine genauere Quellangabe ?
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: UTF-8

Beitrag von AUGE_OHR »

hi,
ich habe eine ausführliche Anleitung von Andreas Gehrs-Pahl im Alaska Newsforum erhalten.

Das Subject scheint "Base64 encoded" zu sein d.h. ich brächte erstmal einen "decoder"
wie "FromBase64()" from ASINet or "XbBase64Decode()" from Xb2Net.

Frage hat jemand solche ähnliche Routinen ?

Danach kommt dann "cUtf8ToAnsi()" oder "cUtf8ToOEM()" dran was ich wohl in der ot4xb Lib
von Pablo finde.

Wenn alles klappt sollte man dann wieder "lesbaren" Text haben ...
Ich werde das ausprobieren und dann berichten.

... oder ich finde einen Hinweis wie man phpBB v3 so einstellt das er "normal"
Benachrichtigungen sendet ...
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von Martin Altmann »

Hallo Hubert,
hat Dir der Hinweis von Jimmy geholfen? Wenn nicht, lade Dir mal die aktuelle(re) Version vom ot4xb herunter...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von brandelh »

Hi,

ich habe die news server von Pablo im Thunderbird abonniert,
aber die beiden neuen waren mir nicht aufgefallen.

Jetzt habe ich auch diese und abonniert und die neuen news groups gefunden.
Die Base64 Umsetzung ist bis jetzt aber nicht dabei.

Ich habe in PowerBasic so eine Funktion, die benutzt aber INLINE ASSEMBLER.
Falls sich nichts anderes findet versuche ich mal eine DLL für XBase daraus zu machen,
das dauert aber ein paar Tage ;-) Die String-Übergabe war dabei immer das Problem.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von brandelh »

Hallo Jimmy,

du hast SEE32 von Marshall-Soft ?

dann solltest du alles haben was du brauchst:
MarshallSoft SMTP/POP3/IMAP XBase++ email component library (SEE4XB) uses a simple API to send and receive mail, including HTML, MIME Base64 and quoted-printable encoded attachments, from within an application. Supports all versions of Alaska XBase++. Knowledge of Winsock and TCP/IP is not needed. Features of SEE4XB include: Send email with inline HTML, GIF, TIF, JPG, BMP and Rich Text attachments. Supports ISO-8859 and UTF-8 character coding.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: UTF-8 äüüÄÖÜ Test

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben:
MIME Base64 and quoted-printable encoded attachments
ich habe es mit

Code: Alles auswählen

Code := XseeIntegerParam(0, SEE_QUOTED_PRINTABLE, QUOTED_HTML)
versucht und es bringt nichts in der Subject Zeile.

Pablo hat mit aber nun eine DLL geschickt mit der es klappt ... evtl. Probleme
mit äöü ... deshalb auch im "Betreff" geändert. Wenn ich also die nächste
Benachrichtigung bekomme hoffe ich auf äöüÄÖÜ
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: UTF-8

Beitrag von brandelh »

Hi,

ich stelle das mal jetzt hier rein, denn irgendwie gehört es ja dazu ;-)
Jimmy,

> >while german Xbase++ Forum have installed new "phpBB" Ver. 3
> >the "Subject" with SEE32 have change.

> >=?UTF-8?B?WGJhc2UtRm9ydW06IE5ldWUgU29mdHdhcmUsIEZvcmVudHJlZmZlbiBpbSBGcsO8?=
> >=?UTF-8?B?aGphaHIgMjAwOQ==?=

This means that the Subject line was Base64 encoded, because of the "ü" in
the text was represented as an UTF-8 character. To convert it back, use a
routine to "decode" Base64 encoded text, like "FromBase64()" from ASINet
or "XbBase64Decode()" from Xb2Net.

First, you need to take both of the strings between the "?B?" and the "?=",
and combine them, then decode that string, and because the "ü" is UTF-8
encoded, you need to use OT4Xb's "cUtf8ToAnsi()" function to convert the
resulting string to ANSI -- or use "cUtf8ToOEM()" for OEM.

If a subject line starts with "=?ISO-8859-1?" (or something similar)
instead of "=?UTF-8?", you won't need the cUtf8ToAnsi() function. The
character set description isn't case sensitive, so it could also be
"=?utf-8?" or "=?iso-8859-2?" etc. If a subject line continues with
"?Q?" instead of "?B?", you need to use "FromQP()" from ASINet (or a
homegrown function) instead of FromBase64()"/"XbBase64Decode()".

Because that particular Subject line is longer than 75 characters, it was
encoded in two parts that you need to combine. Longer text might even be
split into three or four lines. The basic format for "encoded words is
this: "=?" + Character-Set + "?" + Encoding + "?" + Encoded-Text + "?="
For more details, see: RFC 2047.

-- Andreas

--- ---
Andreas Gehrs-Pahl E-Mail: GPahl@CharterMI.net
415 Gute Street or: Andreas@DDPSoftware.com
Owosso, MI 48867-4410 or: Andreas@Aerospace-History.net
Tel: (989) 723-9927 Web Site: http://www.Aerospace-History.net
--- ---
Gruß
Hubert
Antworten