Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Tomcat in Solaris - UTF-8 problem

Posted on 2002-06-19
19
487 Views
Last Modified: 2013-12-05
Hi Experts,
   I face a strange problem while deploying a internationalized web application in tomcat 3.3 in solaris machine.
   Its not accepting the UTF-8 characters in solaris version of tomcat. The same code works fine in windows 2000 environment and the user is able to enter UTF-8 characters.
  The jsp also picks up the UTF-8 characters properly in windows environment. But the same code does not work when deployed in solaris environment.
  What could be the problem. Is it anything related to "file.encoding" property set by the JVM.
  Can anyone help me on this.

Thankx in advance
Rajesh
0
Comment
Question by:rajesh_bala
  • 12
  • 7
19 Comments
 
LVL 16

Expert Comment

by:heyhey_
ID: 7097926
what eaxctly is the problem ? do you see any error messages ?
0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7097934
Hi HeyHey,
  Let me rephrase it.

1. User enters french characters in the text box (html page).

2. At the server side, we store this value in the data base. (This works fine without any problem).


3. In the next page, we display the user entered french characters. (Here is the problem. It displays some junk characters instead of the french characters.).

4. The value displayed is persisted in the session and displayed to the user. It has got no relation to the database.
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 7097970
1. what code do you use for getting / displaying text
2. can you give me URL so that I can see the problem myslef ?
0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 10

Author Comment

by:rajesh_bala
ID: 7097980
Sorry heyhey,
  Since we are in the development process, its in VPN. So u would not be able to access it.
  I don't find any problem in the code. The reason being, it works perfectly ok with windows 2000,tomcat 3.3
  The problem is only with solaris 2.6, tomcat 3.3 environment.
0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7097982
I would greatly appriciate ur help, if this could be solved.

best regards
Rajesh
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 7097985
post the code.

with a couple of debugging statements you can quickly isolate the problem.
0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7098003
Sorry heyhey...i can't post the entire code. We are using some framework that its complicated. Anyways, i have given some code in the jsp, the way that we use UTF-8 in the jsp.

<%@ page import="javax.servlet.http.HttpUtils"%>
<%@ page contentType = "text/html;charset=UTF-8"%>
<%
     --
     ----
     ----
     ----
     ----
          String forwardingURL = "/cnams/home/Login.jsp";
          response.sendRedirect(response.encodeURL(forwardingURL));

     }
%>


In the serverside, we are using request.readParameter() method.
0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7098007
I have also searched google about this problem. But could not find most relavent data.
Do i need to install any patch for the jvm?...
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 7098020
you do not give me enough information to help you solving the problem.

I do not think that this is JavaVM bug - after all we are talking about characters/bytes conversions.

save the raw data (as byte array) in several places in the app and try to find out where exactly is the differnece between Win and Solaris behavior.
0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7101344
Hi heyhey,
  I tried to compare the strings in windows and solaris. The data in both the environments are different.

For ex :
Ü : [B@a6997 : Windows 2000
Ü : [B@58581d  : Solaris 2.6

I tried entering Ü and got the above two results. What could be the next step. Please guide me.

0
 
LVL 16

Accepted Solution

by:
heyhey_ earned 100 total points
ID: 7101348
use

System.out.println(hexDump(buf));

to dump the whole array.

here are the helper methods


  public static String hexDump(byte buf[])
  {
    return hexDump(buf, 0, buf.length);
  }
 
  public static String hexDump(byte buf[], int pos, int len)
  {
    String st = "";
    for (int i = pos; i < len; i++)
    {
      int nn = 0xff & buf[i];
      char nn1 = (char)('0' + (nn >> 4));
      char nn2 = (char)('0' + (nn & 0x0f));
      if (nn1 > '9') nn1 += (65 - 58) + 32;
      if (nn2 > '9') nn2 += (65 - 58) + 32;
     
      st += "<0x" + nn1 + nn2 + ">";
    }
    return st;
  }
0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7101366
Hi,
  I tried the above and got the following results.

 <0xc3><0x9c>  -   "Ü "  (please note that it is followed by a space) - This is in Solaris environment
 <0xdc>  -  in windows environment. Please note that even though i used space with "Ü " it didn't print the value of that..

What is the significance of printing the dump like this. Can u please explain heyhey.




0
 
LVL 16

Expert Comment

by:heyhey_
ID: 7101368
decoded char data on the two machines is different, which IS A PROBLEM.

I lost too much time on that question and I CANNOT HELP YOU IF YOU DON'T SHOW ME YOUR CODE.
0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7101369
Hi,
  I tried the above and got the following results.

 <0xc3><0x9c>  -   "Ü "  (please note that it is followed by a space) - This is in Solaris environment
 <0xdc>  -  in windows environment. Please note that even though i used space with "Ü " it didn't print the value of that..

What is the significance of printing the dump like this. Can u please explain heyhey.




0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7101374
Hi heyhey,
  I got a mail that the question is updated. But when i see the page there is no comments. Can u please repost the comments.

Thankx
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 7101376
Comment

From: heyhey_
Date: 06/22/2002 11:43PM PST

decoded char data on the two machines is different, which IS A PROBLEM.

I lost too much time on that question and I CANNOT HELP YOU IF YOU DON'T SHOW ME YOUR CODE.
0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7110107
Hi,
  I could not still correct the problem. I tried setting the locale to "en_US.UTF-8" and then tried. Even that didn't help.
  Anyways..thanks a lot for giving the suggestion at the right time heyhey..

regards
Rajesh
0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7114055
Hi HeyHey,
  I am trying it with the following sample code. The following code is saved as test.jsp.

<%
String tmp=null;
if(request.getParameter("test")!=null)
{
     
     tmp=request.getParameter("test");
     out.println(tmp);
     out.println("<br>BYTES : " + tmp.getBytes());

     String st = "";
   for (int i = pos; i < len; i++)
   {
     int nn = 0xff & buf[i];
     char nn1 = (char)('0' + (nn >> 4));
     char nn2 = (char)('0' + (nn & 0x0f));
     if (nn1 > '9') nn1 += (65 - 58) + 32;
     if (nn2 > '9') nn2 += (65 - 58) + 32;
     
     st += "<0x" + nn1 + nn2 + ">";
   }
}
else
{
     tmp="Sample";
}

System.out.println("On the server end ->"+tmp+"<-");
%>
<META http-equiv="Content-Type" content="text/plain; charset=UTF-8">
Hello
<br>
<form method='POST'>
<input type=text name=test value=<%=tmp%>>
<input type=submit>
</form>
<br>
<br>
<h2>
The text comming is -><%= tmp %><-
</h2>

Now, I enter a japanese character in the text box and submit the form.
Its displayed back correctly.
Please note that it works fine in solaris also.
But when i tried to submit the form again , it bombs. It does not show up the correct data. Can u help me on this?..

0
 
LVL 10

Author Comment

by:rajesh_bala
ID: 7114065
Sorry about the previous code. Please use the following code

<%
String tmp=null;
if(request.getParameter("test")!=null)
{
     
     tmp=request.getParameter("test");
     out.println(tmp);
     out.println("<br>BYTES : " + tmp.getBytes());

     String st = "";
     byte[] buf = tmp.getBytes();
   for (int i = 0; i < buf.length; i++)
   {
     int nn = 0xff & buf[i];
     char nn1 = (char)('0' + (nn >> 4));
     char nn2 = (char)('0' + (nn & 0x0f));
     if (nn1 > '9') nn1 += (65 - 58) + 32;
     if (nn2 > '9') nn2 += (65 - 58) + 32;
     
     st += "<0x" + nn1 + nn2 + ">";
   }
}
else
{
     tmp="Sample";
}

System.out.println("On the server end ->"+tmp+"<-");
%>
<META http-equiv="Content-Type" content="text/plain; charset=UTF-8">
Hello
<br>
<form method='POST'>
<input type=text name=test value=<%=tmp%>>
<input type=submit>
</form>
<br>
<br>
<h2>
The text comming is -><%= tmp %><-
</h2>
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

Suggested Solutions

Title # Comments Views Activity
Weekend adv creator 3 52
SCP a file to multiple machines using a script 4 66
ejb entity bean example issue 2 16
Selenium docs api java index 3 48
Attention: This article will no longer be maintained. If you have any questions, please feel free to mail me. jgh@FreeBSD.org Please see http://www.freebsd.org/doc/en_US.ISO8859-1/articles/freebsd-update-server/ for the updated article. It is avail…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
In a previous video, we went over how to export a DynamoDB table into Amazon S3.  In this video, we show how to load the export from S3 into a DynamoDB table.

856 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