Encoded lines in email, parsing/decoding in Rebol?
[1/2] from: mat::plothatching::com at: 30-Apr-2002 11:31
Folks,
I got this parsed out of an E-mail as a name. Manually, of course,
since import-email doesn't save the real name.
=?ISO-2022-JP?B?GyRCTlM4NhsoQiAbJEJNNUc3GyhC?
This appears to be a Japanese name specified on the From: line with a
Japanese character set. I didn't even know you could do this!
For my application I need to display the name on a web page, which is
fine my HTML will select the right character set. But does anyone know
how to turn the above into the real sequence that will be printable
into a HTML page?
Regards,
Mat Bettinson
[2/2] from: brett:codeconscious at: 30-Apr-2002 23:53
Hi Mat,
> This appears to be a Japanese name specified on the From: line with a
> Japanese character set. I didn't even know you could do this!
I've not seen one of those either. But since Japan's Prime Minister is
in Australia at the moment, I thought I'd investigate a little bit.
I found this helpful item on searching with Google.
http://wuarchive.wustl.edu/packages/first-virtual/nsb/MIME-tutorial.ps
Googles text translation:
http://216.239.35.100/search?q=cache:XOfHNdxE6fIC:wuarchive.wustl.edu/packag
es/first-virtual/nsb/MIME-tutorial.ps+%22%3D%3FISO-2022-JP%3FB%3F%22+example
+encoding+character&hl=en
In particular:
=?CHARSET?ENCODING?DATA?
Where ENCODING is B or Q - B for base64 Q for quoted-printable
So for your example you take the DATA bit between the last two "?" and
debase/base data 64 on it. Then you do a to-string on the result. Where
you go from here I don't know.
Now if debase crashes on you - you can try this workaround (watch line
wraps):
debase: function [
{Converts a string from a different base representation to binary.
Note: This is a patched version.}
value [any-string!] "The string to convert"
/base {Allow a selection of a different base for conversion}
base-value [integer!] "The base to convert from: 64, 16, or 2"
] [tmp] [
if not base [base-value: system/options/binary-base]
if not found? find [64 16 2] base-value [return none]
tmp: either string? value [copy value] [to-string value]
RETURN first load/all append insert tmp compose [(base-value) "#{"]
}
]
I hope it helps. I'd be interested in your findings.
Brett.