Seite 1 von 1

UTF-8 äöüÄöü ß

Verfasst: Fr, 12. Sep 2008 1:28
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"

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 8:32
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 ... ?

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 8:34
von Martin Altmann
Hallo Hubert,
nein - UTF-8 hat nichts mit Unicode zu tun...

Viele Grüße,
Martin

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 10:07
von hschmidt
Hallo Martin,

da ist Wikipedia aber anderer Meinung: :wink:

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

Hans

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 10:16
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

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 12:56
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 ;-)

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 13:03
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

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 13:12
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

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 13:25
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

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 14:52
von brandelh
Hallo Martin,

ich habe eben die Online-Doku von ot4XB.DLL durchgesehen und nichts zu UTF gefunden.
Hast du eine genauere Quellangabe ?

Re: UTF-8

Verfasst: Fr, 12. Sep 2008 19:01
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 ...

Re: UTF-8

Verfasst: Sa, 13. Sep 2008 0:44
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

Re: UTF-8

Verfasst: Sa, 13. Sep 2008 5:07
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.

Re: UTF-8

Verfasst: Sa, 13. Sep 2008 5:34
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.

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

Verfasst: Di, 16. Sep 2008 1:29
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 äöüÄÖÜ

Re: UTF-8

Verfasst: Di, 16. Sep 2008 23:25
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
--- ---