It seems that the problem is more of general python problem than of web2py.
Before using string:list type field to store user-defined field, I didn't experience having dict key values as non-ascii. Because of the new problem definition, I did experience it and learned something new. For just clearing the problem out of web2py: The problem of extra escape character added can be reproduced as below. >>> a_dict = { '\xec\x9d' : '\xed\x95' } >>> str(a_dict) "{ '\\xec\\x9d' : '\xed\\x95' }"