code: def normalizeUnicode(text, encoding='humanascii'):
      
      if text == "":
  	return ""
  
      unicodeinput = True
      if not isinstance(text, unicode):
          text = unicode(text, 'utf-8')
          unicodeinput = False
  
      res = ''
      global allowed, allowedid
      if encoding == 'humanascii' or encoding == 'identifier':
          enc = 'ascii'
      else:
          enc = encoding
      for ch in text:
          if (encoding == 'humanascii') and (ch in allowed):
              # ASCII chars, digits etc. stay untouched
              res += ch
              continue
          if (encoding == 'identifier') and (ch in allowedid):
              # ASCII chars, digits etc. stay untouched
              res += ch
              continue
          else:
              try:
                  ch.encode(enc,'strict')
                  if encoding == 'identifier':
                      res += '_'
                  else:
                      res += ch
              except UnicodeEncodeError:
                  ordinal = ord(ch)
                  if mapping.has_key(ordinal):
                      # try to apply custom mappings
                      res += mapping.get(ordinal)
                  elif decomposition(ch) or len(normalize('NFKD',ch)) > 1:
                      normalized = filter(lambda i: not combining(i), normalize('NFKD', ch)).strip()
                      # normalized string may contain non-letter chars too. Remove them
                      # normalized string may result to  more than one char
                      if encoding == 'identifier':
                          res += ''.join([c for c in normalized if c in allowedid])
                      else:
                          res += ''.join([c for c in normalized if c in allowed])
                  else:
                      # hex string instead of unknown char
                      res += "%x" % ordinal
      if encoding == 'identifier':
          res = res.strip('_').replace('_____','_').replace('____','_').replace('___','_').replace('__','_')
          if not res.strip('_')[0] in string.ascii_letters:
              res = '_' + res
      if unicodeinput:
          return res
      else:
          return res.encode('utf-8')
docs: This method is used for normalization of unicode characters to the base ASCII
      letters. Output is ASCII encoded string (or char) with only ASCII letters,
      digits, punctuation and whitespace characters. Case is preserved.