Monday, November 08, 2010 at 12:05 AM.

system.verbs.builtins.string.quotedPrintableDecode

on quotedPrintableDecode (s) {
	<<3/1/01; 4:16:00 PM by JES
		<<Convert quoted printable text to ASCII text.
			<<Cribbed from contentServer.textCleaners.repairQP.
	<<Changes:
		<<3/1/01; 6:30:40 PM by JES
			<<Convert soft carriage returns to the empty sring.
		<<3/1/01; 7:21:30 PM by JES
			<<Optimization: let the kernel translate the hexidecimal number, instead of doing it in script code.
	local (ix = 1, ch, flhex = false, hexstring);
	on translateHexString (hexstring) {
		hexstring = "0x" + hexstring;
		return (char (number (hexstring)))};
	bundle { //decode soft carriage returns
		s = string.replaceAll (s, "=\r\n", "")};
	loop {
		ch = s [ix];
		if flhex {
			if (ch >= 65 and ch <= 70) or string.isNumeric (ch) { //0-9, A-F
				hexstring = hexstring + ch;
				if sizeOf (hexstring) == 2 {
					s = string.replaceAll (s, "=" + hexstring, translateHexString (hexstring));
					flhex = false;
					hexstring = "";
					ix = ix - 2}}
			else {
				flhex = false}}
		else {
			if ch == '=' {
				flhex = true}};
		ix++;
		if ix > sizeOf (s) {
			break}};
	return (s)}
<<bundle //test code
	<<string.quotedPrintableDecode ("Here's some more accented text: =E5=E9=EE=F8=FC=F1") //Windows
		<<"Here's some more accented text: "
	<<string.latinToMac (string.quotedPrintableDecode ("Here's some more accented text: =E5=E9=EE=F8=FC=F1")) //Mac
		<<"Here's some more accented text: "



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.