LATIN_1_CHARS = (
('\xe2\x80\x99', "'"),
('\xc3\xa9', 'e'),
('\xe2\x80\x90', '-'),
('\xe2\x80\x91', '-'),
('\xe2\x80\x92', '-'),
('\xe2\x80\x93', '-'),
('\xe2\x80\x94', '-'),
('\xe2\x80\x94', '-'),
('\xe2\x80\x98', "'"),
('\xe2\x80\x9b', "'"),
('\xe2\x80\x9c', '"'),
('\xe2\x80\x9c', '"'),
('\xe2\x80\x9d', '"'),
('\xe2\x80\x9e', '"'),
('\xe2\x80\x9f', '"'),
('\xe2\x80\xa6', '...'),
('\xe2\x80\xb2', "'"),
('\xe2\x80\xb3', "'"),
('\xe2\x80\xb4', "'"),
('\xe2\x80\xb5', "'"),
('\xe2\x80\xb6', "'"),
('\xe2\x80\xb7', "'"),
('\xe2\x81\xba', "+"),
('\xe2\x81\xbb', "-"),
('\xe2\x81\xbc', "="),
('\xe2\x81\xbd', "("),
('\xe2\x81\xbe', ")")
)
def clean_latin1(data):
try:
return data.encode('utf-8')
except UnicodeDecodeError:
data = data.decode('iso-8859-1')
for _hex, _char in LATIN_1_CHARS:
data = data.replace(_hex, _char)
return data.encode('utf8')