import base64 def encodeHex(plainStr): return base64.b16encode(plainStr) def encodeHex_Generic(plainStr, char = '', end = ''): buff16 = "" for c in plainStr: buff16 += (char + base64.b16encode(c) + end) return buff16 def encodeHex_Shell(plainStr): return encodeHex_Generic(plainStr, '\\x') def encodeHex_Html(plainStr): return encodeHex_Generic(plainStr, '&#', ';') def encodeHex_Url(plainStr): return encodeHex_Generic(plainStr, '%') def decodeHex(hexStr): return base64.b16decode(hexStr.upper()) def decodeHex_Generic(hexStr, char = '', end = ''): hexStr = hexStr.replace(char, '') if end != '': hexStr = hexStr.replace(end, '') return decodeHex(hexStr) def decodeHex_Shell(hexStr): return decodeHex_Generic(hexStr,'\\x') def decodeHex_Html(hexStr): return decodeHex_Generic(hexStr,'&#', ';') def decodeHex_Url(hexStr): return decodeHex_Generic(hexStr,'%') # Base-64 def encodeB64(plainStr): return base64.b64encode(plainStr) def encodeB64_UrlSafe(plainStr): return base64.urlsafe_b64encode(plainStr) def decodeB64(b64Str): return base64.b64decode(b64Str) def decodeB64_UrlSafe(plainStr): return base64.urlsafe_b64decode(plainStr) # Latin-1 def encodeLatin(plainStr): return plainStr.encode('latin-1') def decodeLatin(plainStr): return unicode(plainStr, 'latin-1') # UTF-8 def encodeUTF8(plainStr): return plainStr.encode('utf8') def decodeUTF8(plainStr): return unicode(plainStr, 'utf8') # UTF-7 def encodeUTF7(plainStr): return plainStr.encode('utf7') def decodeUTF7(plainStr): return unicode(plainStr, 'utf7') # UTF-16 def encodeUTF16(plainStr): return plainStr.encode('utf16') def decodeUTF16(plainStr): return unicode(plainStr, 'utf16') # HTML def encodeHTML(s): s = s.replace("&", "&") s = s.replace("<", "<") s = s.replace(">", ">") s = s.replace("\"",""") s = s.replace("'", "'") return s def decodeHTML(s): s = s.replace("<", "<") s = s.replace(">", ">") s = s.replace(""", "\"") s = s.replace("'","'") s = s.replace("&", "&") return s possibleCharsets=["Hex","Hex-Url","Hex-Shell","Hex-Html","Base64","Latin1","UTF-8","UTF-7","UTF-16", "Html"] fctEncode = [encodeHex,encodeHex_Url,encodeHex_Shell,encodeHex_Html,encodeB64,encodeLatin,encodeUTF8,encodeUTF7,encodeUTF16,encodeHTML] fctDecode = [decodeHex,decodeHex_Url,decodeHex_Shell,decodeHex_Html,decodeB64,decodeLatin,decodeUTF8,decodeUTF7,decodeUTF16,decodeHTML] def convert(string, fromCharset, toCharset): if fromCharset != toCharset: # find the position of the charset posFrom, posTo = 0,0 try: posFrom = possibleCharsets.index(fromCharset) posTo = possibleCharsets.index(toCharset) except: print "Error in charset name" encodeF = fctEncode[posTo] decodeF = fctDecode[posFrom] ret = string try: if fromCharset != 'Unicode': ret = decodeF(ret) ret = encodeF(ret) return ret except: print "Error in encoding/decoding" return string