0

Here how jsp page is called.

eventMap.jsp?venue=%C4%B0ndigo

This is the line in eventMap.jsp which I get venue parameter:

var venue="<%= URLDecoder.decode(request.getParameter("venue"),"UTF-8") %>";

Unfortunately this is the result in final javascript:

var venue="İndigo"; 

How can I use encoding properly in jsp page in order to get decoded value correctly (İngido).

Edit: Whole eventMap.jsp

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.net.URLDecoder"%>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Event on Map></title>
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" charset="UTF-8">
  function initialize() {
    <% request.setCharacterEncoding("UTF-8"); %> 
    var lat=<%= request.getParameter("lat") %>;
    var lng=<%= request.getParameter("lng") %>;
    var venue="<%= URLDecoder.decode(request.getParameter("venue"),"UTF-8") %>";

    var myLatlng = new google.maps.LatLng(lat,lng);
    var myOptions = {
      zoom: 15,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    var marker = new google.maps.Marker({
        position: myLatlng, 
        map: map,
        title:"Hello"
    });   

    var infowindow = new google.maps.InfoWindow({ content: venue, size: new google.maps.Size(50,50)});
        google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map,marker);
    });

  }
</script>
</head>
<body onload="initialize()">
  <div id="map_canvas"></div>
</body>

</html>

Firebug Result:

<!DOCTYPE html>
2
3
4<html>
5<head>
6<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
7<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
8<title>Event on Map</title>
9<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
10<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
11<script type="text/javascript" charset="UTF-8">
12 function initialize() {
13 var lat=41.062786;
14 var lng=28.981934;
15 var venue="İTà Kültür Sanat BirliÄi (KSB) Binası Küçük Salon (Maslak)";
16
17 var myLatlng = new google.maps.LatLng(lat,lng);
18 var myOptions = {
19 zoom: 15,
20 center: myLatlng,
21 mapTypeId: google.maps.MapTypeId.ROADMAP
22 }
23 var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
24
25 var marker = new google.maps.Marker({
26 position: myLatlng,
27 map: map,
28 title:"Hello"
29 });
30
31 var infowindow = new google.maps.InfoWindow({ content: venue, size: new google.maps.Size(50,50)});
32 google.maps.event.addListener(marker, 'click', function() {
33 infowindow.open(map,marker);
34 });
35
36 }
37</script>
38</head>
39<body onload="initialize()">
40 <div id="map_canvas"></div>
41</body>
42
43</html> 

3 Answers 3

3

Decoding of the GET query string is handled by the servletcontainer, not by the Servlet API. It's unclear which servletcontainer you're using, so I can't give a detailed answer. In for example Tomcat, it's configureable by URIEncoding attribute in the <Connector> element in /conf/server.xml.

<Connector URIEncoding="UTF-8">

Configuration is similar in other servletcontainers.

Then you can remove the unnecessary URLDecoder line. The getParameter() already returns the decoded parameter.

See also:


Unrelated to the actual problem, I strongly recommend to replace scriptlets by EL and use JSTL fn:escapeXml to prevent XSS attacks.

var lat = ${fn:escapeXml(param.lat)};
var lng = ${fn:escapeXml(param.lng)};
var venue = "${fn:escapeXml(param.venue)}";

See also:

Sign up to request clarification or add additional context in comments.

2 Comments

Yep, now it works, but what if I don't have access to server config files?
Ensure that you pick/choose a decent hosting with good support and inform whether it's set to UTF-8. Otherwise you've to hack around it with manually parsing request.getQueryString() with help of a Filter and HttpServletRequestWrapper.
0

What does your JSP header look like?

Make sure it says something like:

<%@ page contentType="text/xhtml;charset=UTF-8"%>

You can also check HTTP headers you are getting when invoking your JSP. Make sure your response is UTF-8 encoded.

2 Comments

Have you tried FIREBUG to access your JSP? What does the encoding looks like?
The key is the pageEncoding attribute, not the contentType attribute.
0

Maybe this method is overriding the wrong encoding: request.setCharacterEncoding("UTF-8")

Probably you should check the encoding to be used in your JSP header or in the request header.

Charlie

1 Comment

This only applies on POST query string in request body, not on GET query string in request URL.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.