When processing intergration or conversion between systems you will more often than not come across differences in character encoding.
An example may be conversion from some characters in latin1 to iso646-se
[code lang=”python”]
# Conversion dictionary
latin1_to_iso646se = { 0xC5:0x5D, 0xC4:0x5B, 0xD6:0x5C, 0xE5:0x7D, 0xE4:0x7B, 0xF6:0x7C, 0xC9:0x40, 0xCB:0x45, 0xE9:0x60, 0xEB:0x65, 0x00:0x20 }
def translate_latin1_iso646se(latin1):
“””
Help translate latin1 to usascii.
:param latin1:
:return:
“””
return chr(latin1_to_iso646se[latin1])
def encode_line(line):
l = “”
try:
l = str(line).encode(‘us-ascii’)
except UnicodeDecodeError:
l = “”
r = range(len(line))
for c in range(len(line)):
j = ord(line[c])
if j > 127:
if j in latin1_to_iso646se.keys():
l += translate_latin1_iso646se(j)
else:
print “Skip char {0} {1}”.format(str(j),line[c])
else:
l += line[c]
finally:
return l
# Conversion called
print “latin1_line encoded as iso646se: “, encode_line(latin1_line):
[/code]