Muppigt var det här. Tomcat bråkar med mig och vill inte läsa GET parametrar med rätt charset (UTF-8) utan envisas med att använda 8859-1. Kan man ställa in Tomcat på nåt sätt så att den gör rätt, eller hur hanterar man bäst att servrar gör olika?
Dels kan du ställa vilket default charset du använder i både TC och JVM:en och sedan går det också att deklarera detta i de anrop som görs genom att sätta sidans charset.
Jo, jag vet att man ska sätta charset i http headern. Det är inte det som är felet, men tack ändå. ;)
Kolla på följande exempel, testkör gärna och skriv i lite grejs i textfältet och skicka iväg formuläret. Skriv text som innehåller tecken utöver a-z0-9, till exempel "ölglas är aldrig passé" eller "ölglas für alles!" så kommer du se vad jag menar. Nånting är knas, eller?
String messageParam = request.getParameter("message");
String message = new String(messageParam.getBytes("8859_1"), "UTF-8");
visas texten okej men vad händer om man deployar appen på en server som inte behöver denna fix? Eller kör alla servrar med 8859-1 (som jag antar att TC verkar använda sig av) med bakåtkompatibilitet i åtanke?
Av någon keff anledning finns det inget standardmässigt sätt att säga åt en servletmotor hur den ska avkoda indata, och defaulten kommer förstås från den gamla onda tiden, när Latin-1 användes till allt. Så ja, standard är ISO-8859-1, men det betyder inte att det är rätt. Vill man använda UTF-8 i Tomcat fixar man det via server.xml, se t.ex. http://confluence.atlassian.com/display/DOC/Configuring+Tomcat's+URI+encoding
PS. Den enda korrekta teckenuppsättningsteststrängen är "François och Niños räksmörgåscafé" ;)