Ik heb een servlet waarmee ik unicode strings uit HTTP post parameters wil verwerken. Het HTML formulier heeft als content-type "text/html; charset=UTF-8". Het probleem doet zich voor dat als een parameter gelezen wordt met:
De geretourneerde string blijkt niet gecodeerd te zijn als UTF-8. Als mogelijke oplossing heb ik in het form-element een het attribuut accept-charset opgenomen:
Het volgende is ook vreemd:
Bovenstaande retourneert null. Het lijkt er op dat accept-charset niet gehonoreerd wordt?
Een mogelijke, maar ongewenste, workaround voor dit probleem is het opnieuw coderen van de String in UTF-8.
Java:
1
| request.getParameter("naam"); |
De geretourneerde string blijkt niet gecodeerd te zijn als UTF-8. Als mogelijke oplossing heb ik in het form-element een het attribuut accept-charset opgenomen:
HTML:
1
| <form action="servlet" method="post" accept-charset="UTF-8"> |
Het volgende is ook vreemd:
Java:
1
| request.getCharacterEncoding(); |
Bovenstaande retourneert null. Het lijkt er op dat accept-charset niet gehonoreerd wordt?
Een mogelijke, maar ongewenste, workaround voor dit probleem is het opnieuw coderen van de String in UTF-8.
Java:
Vraag is dus: Hoe zorg ik dat getParameter() een string retourneert gecodeerd in UTF-8, zonder dat ik de bovenstaande workaround hoef gebruiken?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| // lelijke workaround voor het parameter encoding probleem private String toUTF8(String raw) { BufferedReader reader = null; String result = null; try { reader = new BufferedReader(new InputStreamReader(new StringBufferInputStream(raw), "UTF-8")); result = reader.readLine(); } catch (UnsupportedEncodingException e) { logger.error(e); } catch (IOException e) { logger.error(e); } return result; } |
[ Voor 5% gewijzigd door ari3 op 13-05-2004 14:33 ]
"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand