Solved

Unicode / UTF-8 Weirdness with JSP / Servlets on Tomcat

Posted on 2009-05-07
5
462 Views
Last Modified: 2013-11-24
My code actually works, but I do not understand how it is working, and I need to in order to fix another part of the system.

I have a jsp page which contains a contenteditable div which is used (IE only) as a simple html editor. The charset in the page is utf-8. For the purposes of this example I copy-and-paste  a Greek beta character into the div, and nothing else, and submit the contents to the server. I then intercept the passed parameter on the server thus :

String html = request.getParameter("dochtml");

Here is what I don't understand. The beta character is not represented as I would expect as u03B2, but instead as two characters u00CE and u00B2. These are 'the Latin capital letter I with circumflex' and 'Superscript 2' (http://www.unicode.org/charts/PDF/U0080.pdf and see the attached image).

So what is going on ? Why am I seeing these characters ?

To confuse matters even more, this code is working - if I save the html in a mysql db (using utf8), and then pull it out into the browser, sure enough there is the greek beta character again. How is this happening ?

Thanks in advance for any pointers.


debug.png
0
Comment
Question by:emsttam
  • 3
  • 2
5 Comments
 
LVL 12

Expert Comment

by:Gibu George
ID: 24328278
What is happening is the String html is the default os encoded string which I think is not UTF-8, most probably cp1252, which represents the UTF-8 (as they are double byte characters) as two separate single byte chars. When the page is loaded into the browser, and as you have set the encoding of the content to UTF-8, the browser does a decode and it is shown properly
0
 

Author Comment

by:emsttam
ID: 24328349
gibu george,

Where / when do you think this 'conversion' is happening? Java uses Unicode internally, so why any OS related conversion ?
0
 
LVL 12

Expert Comment

by:Gibu George
ID: 24328448
you mean the cp1252, it is the normal windows charset
0
 
LVL 12

Accepted Solution

by:
Gibu George earned 500 total points
ID: 24328463
java uses os encoding by default, if you want a string to be encoded in unicode u need to use
new String(oldString.getBytes(),"UTF-8")
0
 

Author Closing Comment

by:emsttam
ID: 31579108
Thanks, you got me pretty much there. I think rather than the default platform charset it may be using 8859-1 (see the second entry here http://www.jguru.com/faq/view.jsp?EID=137049), but that's splitting hairs.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A publishing tool, a Version Control System, or a Collaboration Platform! These can be some of the defining words for the two very famous web-hosting Git repositories: Bitbucket and Github. Git is widely used amongst the programmers and developers f…
These days, all we hear about hacktivists took down so and so websites and retrieved thousands of user’s data. One of the techniques to get unauthorized access to database is by performing SQL injection. This article is quite lengthy which gives bas…
The viewer will learn how to implement Singleton Design Pattern in Java.
Learn how to set-up custom confirmation messages to users who complete your Wufoo form. Include inputs from fields in your form, webpage redirects, and more with Wufoo’s confirmation options.

823 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question