woensdag 29 augustus 2007

UTF-8

Het is niet altijd vanzelfsprekend dat gegevens probleemloos van punt a naar punt b komen. Dit is iets dat me de afgelopen paar dagen maar al te duidelijk is geworden. Het idee is heel simpel, op een JSP pagina heb je een formulier die gegevens post naar een tweede JSP pagina. In eerste instantie lijkt alles goed te gaan, totdat je vreemde karakters gaat invoeren. Een "Ÿ" in het formulier kwam op de tweede jsp pagina aan als een "Ǻ¸". Misschien zijn het karakters die niet veel gebruikt worden, maar je wilt toch dat alle karakters goed aankomen.

Een zoektocht naar het antwoord op het internet leverde een aantal mogelijke oplossingen. Allereerst kun je met JSP aangeven dat de data in UTF-8 is. Dit kun je doen met de onderstaande code:

<%@ page pageEncoding="UTF-8" %>
Werkt ook dat niet, dan kun je zelfs aangeven dat je HttpServletRequest object (het object dat de ingevulde gegevens uit het formulier bevat) in UTF-8 is. Hieronder een voorbeeld hiervan:
request.setCharacterEncoding("UTF-8");
Bij mij werkte dit allemaal niet en dus waren harde maatregelen nodig. De code hieronder is bedoeld als de bovenstaande codes niet werken. Hierbij ga ik er even van uit dat je JSP pagina's in ISO_8859_1 encoding zijn, maar in principe werkt dit vanuit alle, door JAVA ondersteunde, encodings.
new String((MyString).getBytes("8859_1"), "UTF-8");
Wat gebeurt hier? Met de methode getBytes("8859_1") maak je van je String object een array van Bytes gecodeerd in de opgegeven encoding. Dit is in dit geval ISO_8859_1. Met deze array maak je een nieuw String object in de UTF-8 encoding.

Het resultaat is dat een "Ÿ" ook daadwerkelijk een "Ÿ" blijft.