Page 1 of 1
libcurl - how to decode special chars im mail
Posted: Thu Jun 13, 2024 6:20 pm
by flashbob
I'm currently testing the libcurl library on macOS. The received messages contain characters instead of e.g. german umlauts as in the following example (Memory Viewer):
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
...
Dies ist eine Testnachricht mit </span><b><span =[CR]
[LF]
style=3D'font-size:10.0pt;font-family:"Arial","sans-serif";color:red'>rot=[CR]
[LF]
em</span></b><span =[CR]
[LF]
style=3D'font-size:10.0pt;font-family:"Arial","sans-serif";color:red'> =[CR]
[LF]
</span><span =[CR]
[LF]
style=3D'font-size:10.0pt;font-family:"Arial","sans-serif";color:#002060'=[CR]
[LF]
>und <b>fetten</b> Text.<br><br>Mit freundlichen =[CR]
[LF]
Gr=FC=DFen<br><br><o:p></o:p></span></p></div></body></html>
As you can see there are special chars (=E4, 3D, =F6, =09, 0, ...)
Any ideas how to decode the received message ? I think its not the right way to replace strings such as:
msg_html = ReplaceString(msg_html, "=E4", "ä" )
msg_html = ReplaceString(msg_html, "=FC", "ü" )
thx in advance !
Re: libcurl - how to decode special chars im mail
Posted: Thu Jun 13, 2024 9:31 pm
by idle
Im on phone but there are two functions you can use Urldecode() and
Esacpehtml() or is that escapehtmlstring()

Re: libcurl - how to decode special chars im mail
Posted: Fri Jun 14, 2024 8:15 am
by infratec
If you look in the header fields, you can see:
Content-Transfer-Encoding: quoted-printable
Look here:
https://en.wikipedia.org/wiki/Quoted-printable
https://de.wikipedia.org/wiki/Quoted-Pr ... -Kodierung
Such a decoder is not implemented in PB. You have to write it on your own.
Re: libcurl - how to decode special chars im mail
Posted: Fri Jun 14, 2024 8:37 am
by infratec
A first try:
Code: Select all
Procedure.s Quotedprintable_Decoder(*Text.Character)
Protected Result$, *Start
*Start = *Text
While *Text\c
If *Text\c = '='
Result$ + PeekS(*Start, (*Text - *Start) / SizeOf(Character))
*Text + SizeOf(Character)
Result$ + Chr(Val("$" + PeekS(*Text, 2)))
*Text + 2 * SizeOf(Character)
*Start = *Text
Else
*Text + SizeOf(Character)
EndIf
Wend
If *Start < *Text
Result$ + PeekS(*Start, (*Text - *Start) / SizeOf(Character))
EndIf
ProcedureReturn Result$
EndProcedure
QPText$ = ~"Dies ist eine Testnachricht mit </span><b><span =0Dstyle=3D'font-size:10.0pt;font-family:\"Arial\",\"sans-serif\";color:red'>rot=0Dem</span></b><span =0D"
QPText$ + ~"style=3D'font-size:10.0pt;font-family:\"Arial\",\"sans-serif\";color:red'> =0D</span><span =0Dstyle=3D'font-size:10.0pt;font-family:\"Arial\",\"sans-serif\";color:#002060'=0D"
QPText$ + ~">und <b>fetten</b> Text.<br><br>Mit freundlichen =0DGr=FC=DFen<br><br><o:p></o:p></span></p></div></body></html>"
Debug Quotedprintable_Decoder(@QPText$)
Re: libcurl - how to decode special chars im mail
Posted: Fri Jun 14, 2024 11:44 am
by flashbob
... wow, that's a great solution. Thank you!
Using your code the converted HTML code is now formatted correctly on MAC and Windows (related to special characters like "3D", "=E4", ...)
Here some more test results using MAC OS:
content-Type: text/html;
charset="iso-8859-1"
-> german umlauts are displayed correct in debugger
and web gadget.
content="text/html;
charset=utf-8"
-> Umlauts are displayed incorrectly in the debugger and web gadget (e.g. "ö" = "ö", "ü" instead of "ü")
-> I used a function to convert asccii to utf8 (see func below) -> ok for web gadget and debugger
Test results using Windows 7:
content-Type: text/html;
charset="iso-8859-1"
-> german umlauts are displayed correct in debugger but NOT in web gadget (e.g. "Mit freundlichen Grüßen")
content="text/html;
charset=utf-8"
-> german umlauts are NOT displayed correct in debugger and web gadget ("ü" instead of "ü", "ä" instead of "ä",..)
-> Using my function converts not all of german umlauts (e.g. "ß", big "Ü")
Her my function to convert ascii:
Code: Select all
Procedure.s AsciiToUTF8(String$)
Protected Buffer$
Buffer$ = Space(Len(String$))
PokeS(@Buffer$, String$, -1, #PB_Ascii)
String$ = PeekS(@Buffer$, -1, #PB_UTF8)
ProcedureReturn String$
EndProcedure