on second thought, only deal with printable chars