Send the page that includes the form in utf8 since some browsers write it back in the charset they recieved the data regardless what you tell them with accept-charset. Put a hidden field in the post request, that ensures you what charset you expect to get back . Use the Accept-charset attribute in your forms. check your hidden field and convert the recieved data back to utf8 if needed. Use Post requests.
I do not know, but the trick is to put information into a form that gives you the power to recognice what happened to the data after the user has add something. Then convert it to a known state and continue processing. That works very well. I inherite from Apache::Request, process all incomming POST requests if they include one of my keys otherwise pass them through.