-- See http://www.ascii.cl/htmlcodes.htm
-- str = string.gsub(str, '', '')
function unescape(str)
-- Symbols
str = string.gsub(str, ' ', ' ') -- space
str = string.gsub(str, '!', '!') -- exclamation point
str = string.gsub(str, '"', '"') -- double quotes
str = string.gsub(str, '"', '"') -- double quotes
str = string.gsub(str, '#', '#') -- number sign
str = string.gsub(str, '$', '$') -- dollar sign
str = string.gsub(str, '%', '%') -- percent sign
str = string.gsub(str, ''', '\'') -- single quote
str = string.gsub(str, '(', '(') -- opening parenthesis
str = string.gsub(str, ')', ')') -- closing parenthesis
str = string.gsub(str, '*', '*') -- asterisk
str = string.gsub(str, '+', '+') -- plus sign
str = string.gsub(str, ',', ',') -- comma
str = string.gsub(str, '-', '-') -- minus sign - hyphen
str = string.gsub(str, '.', '.') -- period
str = string.gsub(str, '/', '/') -- slash
str = string.gsub(str, ':', ':') -- colon
str = string.gsub(str, ';', ';') -- semicolon
str = string.gsub(str, '<', '<') -- less than sign
str = string.gsub(str, '<', '<') -- less than sign
str = string.gsub(str, '=', '=') -- equal sign
str = string.gsub(str, '>', '>') -- greater than sign
str = string.gsub(str, '>', '>') -- greater than sign
str = string.gsub(str, '?', '?') -- question mark
str = string.gsub(str, '@', '@') -- at symbol
str = string.gsub(str, '[', '[') -- opening bracket
str = string.gsub(str, '\', '\\') -- backslash
str = string.gsub(str, ']', ']') -- closing bracket
str = string.gsub(str, '^', '^') -- caret - circumflex
str = string.gsub(str, '_', '_') -- underscore
str = string.gsub(str, '`', '`') -- grave accent
str = string.gsub(str, '{', '{') -- opening brace
str = string.gsub(str, '|', '|') -- vertical bar
str = string.gsub(str, '}', '}') -- closing brace
str = string.gsub(str, '~', '~') -- equivalency sign - tilde
str = string.gsub(str, ' ', ' ') -- non-breaking space
str = string.gsub(str, ' ', ' ') -- non-breaking space
str = string.gsub(str, '¡', '¡') -- inverted exclamation mark
str = string.gsub(str, '¡', '¡') -- inverted exclamation mark
str = string.gsub(str, '¢', '¢') -- cent sign
str = string.gsub(str, '¢', '¢') -- cent sign
str = string.gsub(str, '£', '£') -- pound sign
str = string.gsub(str, '£', '£') -- pound sign
str = string.gsub(str, '¤', '¤') -- currency sign
str = string.gsub(str, '¤', '¤') -- currency sign
str = string.gsub(str, '¥', '¥') -- yen sign
str = string.gsub(str, '¥', '¥') -- yen sign
str = string.gsub(str, '¦', '¦') -- broken vertical bar
str = string.gsub(str, '¦', '¦') -- broken vertical bar
str = string.gsub(str, '§', '§') -- section sign
str = string.gsub(str, '§', '§') -- section sign
str = string.gsub(str, '¨', '¨') -- spacing diaeresis - umlaut
str = string.gsub(str, '¨', '¨') -- spacing diaeresis - umlaut
str = string.gsub(str, '©', '©') -- copyright sign
str = string.gsub(str, '©', '©') -- copyright sign
str = string.gsub(str, 'ª', 'ª') -- feminine ordinal indicator
str = string.gsub(str, 'ª', 'ª') -- feminine ordinal indicator
str = string.gsub(str, '«', '«') -- left double angle quotes
str = string.gsub(str, '«', '«') -- left double angle quotes
str = string.gsub(str, '¬', '¬') -- not sign
str = string.gsub(str, '¬', '¬') -- not sign
str = string.gsub(str, '', '') -- soft hyphen
str = string.gsub(str, '', '') -- soft hyphen
str = string.gsub(str, '®', '®') -- registered trade mark sign
str = string.gsub(str, '®', '®') -- registered trade mark sign
str = string.gsub(str, '¯', '¯') -- spacing macron - overline
str = string.gsub(str, '¯', '¯') -- spacing macron - overline
str = string.gsub(str, '°', '°') -- degree sign
str = string.gsub(str, '°', '°') -- degree sign
str = string.gsub(str, '±', '±') -- plus-or-minus sign
str = string.gsub(str, '±', '±') -- plus-or-minus sign
str = string.gsub(str, '²', '²') -- superscript two - squared
str = string.gsub(str, '²', '²') -- superscript two - squared
str = string.gsub(str, '³', '³') -- superscript three - cubed
str = string.gsub(str, '³', '³') -- superscript three - cubed
str = string.gsub(str, '´', '´') -- acute accent - spacing acute
str = string.gsub(str, '´', '´') -- acute accent - spacing acute
str = string.gsub(str, 'µ', 'µ') -- micro sign
str = string.gsub(str, 'µ', 'µ') -- micro sign
str = string.gsub(str, '¶', '¶') -- pilcrow sign - paragraph sign
str = string.gsub(str, '¶', '¶') -- pilcrow sign - paragraph sign
str = string.gsub(str, '·', '·') -- middle dot - Georgian comma
str = string.gsub(str, '·', '·') -- middle dot - Georgian comma
str = string.gsub(str, '¸', '¸') -- spacing cedilla
str = string.gsub(str, '¸', '¸') -- spacing cedilla
str = string.gsub(str, '¹', '¹') -- superscript one
str = string.gsub(str, '¹', '¹') -- superscript one
str = string.gsub(str, 'º', 'º') -- masculine ordinal indicator
str = string.gsub(str, 'º', 'º') -- masculine ordinal indicator
str = string.gsub(str, '»', '»') -- right double angle quotes
str = string.gsub(str, '»', '»') -- right double angle quotes
str = string.gsub(str, '¼', '¼') -- fraction one quarter
str = string.gsub(str, '¼', '¼') -- fraction one quarter
str = string.gsub(str, '½', '½') -- fraction one half
str = string.gsub(str, '½', '½') -- fraction one half
str = string.gsub(str, '¾', '¾') -- fraction three quarters
str = string.gsub(str, '¾', '¾') -- fraction three quarters
str = string.gsub(str, '¿', '¿') -- inverted question mark
str = string.gsub(str, '¿', '¿') -- inverted question mark
str = string.gsub(str, '×', '×') -- multiplication sign
str = string.gsub(str, '×', '×') -- multiplication sign
str = string.gsub(str, '÷', '÷') -- division sign
str = string.gsub(str, '÷', '÷') -- division sign
str = string.gsub(str, '–', '–') -- en dash
str = string.gsub(str, '–', '–') -- en dash
str = string.gsub(str, '—', '—') -- em dash
str = string.gsub(str, '—', '—') -- em dash
str = string.gsub(str, '‘', '‘') -- left single quotation mark
str = string.gsub(str, '‘', '‘') -- left single quotation mark
str = string.gsub(str, '’', '’') -- right single quotation mark
str = string.gsub(str, '’', '’') -- right single quotation mark
str = string.gsub(str, '‚', '‚') -- single low-9 quotation mark
str = string.gsub(str, '‚', '‚') -- single low-9 quotation mark
str = string.gsub(str, '“', '“') -- left double quotation mark
str = string.gsub(str, '“', '“') -- left double quotation mark
str = string.gsub(str, '”', '”') -- right double quotation mark
str = string.gsub(str, '”', '”') -- right double quotation mark
str = string.gsub(str, '„', '„') -- double low-9 quotation mark
str = string.gsub(str, '„', '„') -- double low-9 quotation mark
str = string.gsub(str, '†', '†') -- dagger
str = string.gsub(str, '†', '†') -- dagger
str = string.gsub(str, '‡', '‡') -- double dagger
str = string.gsub(str, '‡', '‡') -- double dagger
str = string.gsub(str, '•', '•') -- bullet
str = string.gsub(str, '•', '•') -- bullet
str = string.gsub(str, '…', '…') -- horizontal ellipsis
str = string.gsub(str, '…', '…') -- horizontal ellipsis
str = string.gsub(str, '‰', '‰') -- per thousand sign
str = string.gsub(str, '‰', '‰') -- per thousand sign
str = string.gsub(str, '⁈', '€') -- euro sign
str = string.gsub(str, '€', '€') -- euro sign
str = string.gsub(str, '™', '™') -- trade mark sign
str = string.gsub(str, '™', '™') -- trade mark sign
-- Numbers
str = string.gsub(str, '0', '0') -- zero
str = string.gsub(str, '1', '1') -- one
str = string.gsub(str, '2', '2') -- two
str = string.gsub(str, '3', '3') -- three
str = string.gsub(str, '4', '4') -- four
str = string.gsub(str, '5', '5') -- five
str = string.gsub(str, '6', '6') -- six
str = string.gsub(str, '7', '7') -- seven
str = string.gsub(str, '8', '8') -- eight
str = string.gsub(str, '9', '9') -- nine
-- Big letters
str = string.gsub(str, 'A', 'A')
str = string.gsub(str, 'B', 'B')
str = string.gsub(str, 'C', 'C')
str = string.gsub(str, 'D', 'D')
str = string.gsub(str, 'E', 'E')
str = string.gsub(str, 'F', 'F')
str = string.gsub(str, 'G', 'G')
str = string.gsub(str, 'H', 'H')
str = string.gsub(str, 'I', 'I')
str = string.gsub(str, 'J', 'J')
str = string.gsub(str, 'K', 'K')
str = string.gsub(str, 'L', 'L')
str = string.gsub(str, 'M', 'M')
str = string.gsub(str, 'N', 'N')
str = string.gsub(str, 'O', 'O')
str = string.gsub(str, 'P', 'P')
str = string.gsub(str, 'Q', 'Q')
str = string.gsub(str, 'R', 'R')
str = string.gsub(str, 'S', 'S')
str = string.gsub(str, 'T', 'T')
str = string.gsub(str, 'U', 'U')
str = string.gsub(str, 'V', 'V')
str = string.gsub(str, 'W', 'W')
str = string.gsub(str, 'X', 'X')
str = string.gsub(str, 'Y', 'Y')
str = string.gsub(str, 'Z', 'Z')
-- Small letters
str = string.gsub(str, 'a', 'a')
str = string.gsub(str, 'b', 'b')
str = string.gsub(str, 'c', 'c')
str = string.gsub(str, 'd', 'd')
str = string.gsub(str, 'e', 'e')
str = string.gsub(str, 'f', 'f')
str = string.gsub(str, 'g', 'g')
str = string.gsub(str, 'h', 'h')
str = string.gsub(str, 'i', 'i')
str = string.gsub(str, 'j', 'j')
str = string.gsub(str, 'k', 'k')
str = string.gsub(str, 'l', 'l')
str = string.gsub(str, 'm', 'm')
str = string.gsub(str, 'n', 'n')
str = string.gsub(str, 'o', 'o')
str = string.gsub(str, 'p', 'p')
str = string.gsub(str, 'q', 'q')
str = string.gsub(str, 'r', 'r')
str = string.gsub(str, 's', 's')
str = string.gsub(str, 't', 't')
str = string.gsub(str, 'u', 'u')
str = string.gsub(str, 'v', 'v')
str = string.gsub(str, 'w', 'w')
str = string.gsub(str, 'x', 'x')
str = string.gsub(str, 'y', 'y')
str = string.gsub(str, 'z', 'z')
-- Latin capital letters
str = string.gsub(str, 'À', 'À') -- latin capital letter A with grave
str = string.gsub(str, 'À', 'À') -- latin capital letter A with grave
str = string.gsub(str, 'Á', 'Á') -- latin capital letter A with acute
str = string.gsub(str, 'Á', 'Á') -- latin capital letter A with acute
str = string.gsub(str, 'Â', 'Â') -- latin capital letter A with circumflex
str = string.gsub(str, 'Â', 'Â') -- latin capital letter A with circumflex
str = string.gsub(str, 'Ã', 'Ã') -- latin capital letter A with tilde
str = string.gsub(str, 'Ã', 'Ã') -- latin capital letter A with tilde
str = string.gsub(str, 'Ä', 'Ä') -- latin capital letter A with diaeresis
str = string.gsub(str, 'Ä', 'Ä') -- latin capital letter A with diaeresis
str = string.gsub(str, 'Å', 'Å') -- latin capital letter A with ring above
str = string.gsub(str, 'Å', 'Å') -- latin capital letter A with ring above
str = string.gsub(str, 'Æ', 'Æ') -- latin capital letter AE
str = string.gsub(str, 'Æ', 'Æ') -- latin capital letter AE
str = string.gsub(str, 'Ç', 'Ç') -- latin capital letter C with cedilla
str = string.gsub(str, 'Ç', 'Ç') -- latin capital letter C with cedilla
str = string.gsub(str, 'È', 'È') -- latin capital letter E with grave
str = string.gsub(str, 'È', 'È') -- latin capital letter E with grave
str = string.gsub(str, 'É', 'É') -- latin capital letter E with acute
str = string.gsub(str, 'É', 'É') -- latin capital letter E with acute
str = string.gsub(str, 'Ê', 'Ê') -- latin capital letter E with circumflex
str = string.gsub(str, 'Ê', 'Ê') -- latin capital letter E with circumflex
str = string.gsub(str, 'Ë', 'Ë') -- latin capital letter E with diaeresis
str = string.gsub(str, 'Ë', 'Ë') -- latin capital letter E with diaeresis
str = string.gsub(str, 'Ì', 'Ì') -- latin capital letter I with grave
str = string.gsub(str, 'Ì', 'Ì') -- latin capital letter I with grave
str = string.gsub(str, 'Í', 'Í') -- latin capital letter I with acute
str = string.gsub(str, 'Í', 'Í') -- latin capital letter I with acute
str = string.gsub(str, 'Î', 'Î') -- latin capital letter I with circumflex
str = string.gsub(str, 'Î', 'Î') -- latin capital letter I with circumflex
str = string.gsub(str, 'Ï', 'Ï') -- latin capital letter I with diaeresis
str = string.gsub(str, 'Ï', 'Ï') -- latin capital letter I with diaeresis
str = string.gsub(str, 'Ð', 'Ð') -- latin capital letter ETH
str = string.gsub(str, 'Ð', 'Ð') -- latin capital letter ETH
str = string.gsub(str, 'Ñ', 'Ñ') -- latin capital letter N with tilde
str = string.gsub(str, 'Ñ', 'Ñ') -- latin capital letter N with tilde
str = string.gsub(str, 'Ò', 'Ò') -- latin capital letter O with grave
str = string.gsub(str, 'Ò', 'Ò') -- latin capital letter O with grave
str = string.gsub(str, 'Ó', 'Ó') -- latin capital letter O with acute
str = string.gsub(str, 'Ó', 'Ó') -- latin capital letter O with acute
str = string.gsub(str, 'Ô', 'Ô') -- latin capital letter O with circumflex
str = string.gsub(str, '&Ocrc;', 'Ô') -- latin capital letter O with circumflex
str = string.gsub(str, 'Õ', 'Õ') -- latin capital letter O with tilde
str = string.gsub(str, 'Õ', 'Õ') -- latin capital letter O with tilde
str = string.gsub(str, 'Ö', 'Ö') -- latin capital letter O with diaeresis
str = string.gsub(str, 'Ö', 'Ö') -- latin capital letter O with diaeresis
str = string.gsub(str, 'Ø', 'Ø') -- latin capital letter O with slash
str = string.gsub(str, 'Ø', 'Ø') -- latin capital letter O with slash
str = string.gsub(str, 'Ù', 'Ù') -- latin capital letter U with grave
str = string.gsub(str, 'Ù', 'Ù') -- latin capital letter U with grave
str = string.gsub(str, 'Ú', 'Ú') -- latin capital letter U with acute
str = string.gsub(str, 'Ú', 'Ú') -- latin capital letter U with acute
str = string.gsub(str, 'Û', 'Û') -- latin capital letter U with circumflex
str = string.gsub(str, 'Û', 'Û') -- latin capital letter U with circumflex
str = string.gsub(str, 'Ü', 'Ü') -- latin capital letter U with diaeresis
str = string.gsub(str, 'Ü', 'Ü') -- latin capital letter U with diaeresis
str = string.gsub(str, 'Ý', 'Ý') -- latin capital letter Y with acute
str = string.gsub(str, 'Ý', 'Ý') -- latin capital letter Y with acute
str = string.gsub(str, 'Þ', 'Þ') -- latin capital letter THORN
str = string.gsub(str, 'Þ', 'Þ') -- latin capital letter THORN
str = string.gsub(str, 'Œ', 'Œ') -- latin capital letter OE
str = string.gsub(str, 'Š', 'Š') -- latin capital letter S with caron
str = string.gsub(str, 'Ÿ', 'Ÿ') -- latin capital letter Y with diaeresis
-- Latin small letters
str = string.gsub(str, 'ß', 'ß') -- latin small letter sharp s - ess-zed
str = string.gsub(str, 'ß', 'ß') -- latin small letter sharp s - ess-zed
str = string.gsub(str, 'à', 'à') -- latin small letter a with grave
str = string.gsub(str, 'à', 'à') -- latin small letter a with grave
str = string.gsub(str, 'á', 'á') -- latin small letter a with acute
str = string.gsub(str, 'á', 'á') -- latin small letter a with acute
str = string.gsub(str, 'â', 'â') -- latin small letter a with circumflex
str = string.gsub(str, 'â', 'â') -- latin small letter a with circumflex
str = string.gsub(str, 'ã', 'ã') -- latin small letter a with tilde
str = string.gsub(str, 'ã', 'ã') -- latin small letter a with tilde
str = string.gsub(str, 'ä', 'ä') -- latin small letter a with diaeresis
str = string.gsub(str, 'ä', 'ä') -- latin small letter a with diaeresis
str = string.gsub(str, 'å', 'å') -- latin small letter a with ring above
str = string.gsub(str, 'å', 'å') -- latin small letter a with ring above
str = string.gsub(str, 'æ', 'æ') -- latin small letter ae
str = string.gsub(str, 'æ', 'æ') -- latin small letter ae
str = string.gsub(str, 'ç', 'ç') -- latin small letter c with cedilla
str = string.gsub(str, 'ç', 'ç') -- latin small letter c with cedilla
str = string.gsub(str, 'è', 'è') -- latin small letter e with grave
str = string.gsub(str, 'è', 'è') -- latin small letter e with grave
str = string.gsub(str, 'é', 'é') -- latin small letter e with acute
str = string.gsub(str, 'é', 'é') -- latin small letter e with acute
str = string.gsub(str, 'ê', 'ê') -- latin small letter e with circumflex
str = string.gsub(str, 'ê', 'ê') -- latin small letter e with circumflex
str = string.gsub(str, 'ë', 'ë') -- latin small letter e with diaeresis
str = string.gsub(str, 'ë', 'ë') -- latin small letter e with diaeresis
str = string.gsub(str, 'ì', 'ì') -- latin small letter i with grave
str = string.gsub(str, 'ì', 'ì') -- latin small letter i with grave
str = string.gsub(str, 'í', 'í') -- latin small letter i with acute
str = string.gsub(str, 'í', 'í') -- latin small letter i with acute
str = string.gsub(str, 'î', 'î') -- latin small letter i with circumflex
str = string.gsub(str, 'î', 'î') -- latin small letter i with circumflex
str = string.gsub(str, 'ï', 'ï') -- latin small letter i with diaeresis
str = string.gsub(str, 'ï', 'ï') -- latin small letter i with diaeresis
str = string.gsub(str, 'ð', 'ð') -- latin small letter eth
str = string.gsub(str, 'ð', 'ð') -- latin small letter eth
str = string.gsub(str, 'ñ', 'ñ') -- latin small letter n with tilde
str = string.gsub(str, 'ñ', 'ñ') -- latin small letter n with tilde
str = string.gsub(str, 'ò', 'ò') -- latin small letter o with grave
str = string.gsub(str, 'ò', 'ò') -- latin small letter o with grave
str = string.gsub(str, 'ó', 'ó') -- latin small letter o with acute
str = string.gsub(str, 'ó', 'ó') -- latin small letter o with acute
str = string.gsub(str, 'ô', 'ô') -- latin small letter o with circumflex
str = string.gsub(str, 'ô', 'ô') -- latin small letter o with circumflex
str = string.gsub(str, 'õ', 'õ') -- latin small letter o with tilde
str = string.gsub(str, 'õ', 'õ') -- latin small letter o with tilde
str = string.gsub(str, 'ö', 'ö') -- latin small letter o with diaeresis
str = string.gsub(str, 'ö', 'ö') -- latin small letter o with diaeresis
str = string.gsub(str, 'ø', 'ø') -- latin small letter o with slash
str = string.gsub(str, 'ø', 'ø') -- latin small letter o with slash
str = string.gsub(str, 'ù', 'ù') -- latin small letter u with grave
str = string.gsub(str, 'ù', 'ù') -- latin small letter u with grave
str = string.gsub(str, 'ú', 'ú') -- latin small letter u with acute
str = string.gsub(str, 'ú', 'ú') -- latin small letter u with acute
str = string.gsub(str, 'û', 'û') -- latin small letter u with circumflex
str = string.gsub(str, 'û', 'û') -- latin small letter u with circumflex
str = string.gsub(str, 'ü', 'ü') -- latin small letter u with diaeresis
str = string.gsub(str, 'ü', 'ü') -- latin small letter u with diaeresis
str = string.gsub(str, 'ý', 'ý') -- latin small letter y with acute
str = string.gsub(str, 'ý', 'ý') -- latin small letter y with acute
str = string.gsub(str, 'þ', 'þ') -- latin small letter thorn
str = string.gsub(str, 'þ', 'þ') -- latin small letter thorn
str = string.gsub(str, 'ÿ', 'ÿ') -- latin small letter y with diaeresis
str = string.gsub(str, 'ÿ', 'ÿ') -- latin small letter y with diaeresis
str = string.gsub(str, 'œ', 'œ') -- latin small letter oe
str = string.gsub(str, 'š', 'š') -- latin small letter s with caron
str = string.gsub(str, 'ƒ', 'ƒ') -- latin small f with hook - function
-- Special
-- Emoticons (more soon)
str = string.gsub(str, '⭐️', '⭐️')
-- Japanese Katakana/Kanji (See http://symbolcodes.tlt.psu.edu/bylanguage/japanesechartkatakana.html)
-- Japanese Hiragana (Need a table...)
-- Be sure to do this after all others
str = string.gsub(str, '&', '&') -- amper sand
str = string.gsub(str, '&', '&') -- amper sand
return str
end