I have a Java Servlet running on a Tomcat Server with a MySQL database connection using JDBC.
If I have following piece of code works in, the hard-coded-HTML code works, but everything that comes from the database is displayed incorrectly.
response.setContentType("text/html;charset=UTF-8")
If I remove the line the text from the database gets displayed correct, but not the basic HTML.
In the database, and Eclipse everything is set to UTF-8.
On first sight it looks as if you were converting the text from the database again, once too much.
So the first check is the database. For instance the length of "löl" should be 3. Whether the data stored is correctly, read correctly. As #StanislavL mentioned, not only the database needs the proper encoding, in MySQL also the java driver that communicates needs to be told the encoding with ?useUnicode=yes&characterEncoding=UTF-8.
Maybe write or debug a small piece of code reading the database.
If stored correctly the culprit might be String.getBytes() or new String(bytes).
In the browser inspect the encoding or save the pages.
With a programmer's editor like NotePadd++ or JEdit inspect the HTML. These tools allow reloading with a different encoding, to see what the encodings are.
It should be that the first page is in UTF-8 and the second in Windows-1252 or something else.
Ensure that the HTML source text is correct: you might use "\u00FC" for ü in a JSP.
Related
I'm aware that this question was already asked a couple of times, but I didn't get the problem solved even with the hints mentioned in other posts.
For a small webproject I created some html/jsp pages that are calling links to two servlets. The servlets themselves are talking to a PostgreSQL database. Everything is working instead of the encoding. When I'm typing in special characters (UTF-8) like "ü", "ä" or "ö", I can see them:
correctly inserted into the web page
correctly listed inside of the java objects (Debug mode) correctly inserted into the database
Since the web tool reloads the data with every change (a simultaneously work should be provided), I can also see the following steps working:
after the tool was re-loading the data from the database, the special characters are listed inside of the java objects (Debug mode)
the attribute inside of the request-object has the correct value
Nevertheless, after reload the data is not shown correctly anymore inside the web page - just cryptic signs.
Can you please support? I already checked the following points:
encoding of Eclipse
encoding of database
encoding of servlets
encoding of the application server (Wildfly)
encoding of the JSP files
encoding inside of Chrome
Best greetings,
Jesfreric
Project is based on
Postgres database version 9.3.5,
Java 7, org.hibernate hibernate-core 3.6.10.Final
Problem :
I have two separate system running the same web application. One on of the systems everything is persisted correctly on the other Strings sent to Postgres database contain unicode characters and text like 'nnés' is persisted as 'nns' or 'nnés-2' . The only difference I noticed between those two systems Is one displaying UNICODE and the otherUTF8 as client encoding when doing SHOW client_encoding; in the console. The one running unicode works correctly the other does not.
My question is
Is it possible that client encoding got stuck/hardcoded somehow and it is not being selected based on real client encoding which would mean the strings sent in unicode arent converted to UTF8 but just persisted.
What can be the reasons for such a behavior.
try request.setCharacterEncoding("UTF-8");
First of all i know that this problem is known, and have a lot of answers, but mine is little bit different or unusual.
So, i'm using Eclipse SDK Version: 3.7.1, and i'm developing java app (JRE 1.7) which will work with database.
Since application is in Croatian language I have problems with special characters - č,ć,đ and their insert into DB (mysql dbms, embedded with xampp).
However, i know little about encoding stuff, and i tried to set DB to cp1250_croatian_ci, UTF8_unicode_ci, UTF8_general_ci, latin2_croatian_ci, but sadly I had same problem with each of those. (is it mandatory to SET NAMES utf8 (or something like that) after each connection to DB?)
Also, i want to point it out, that inserting (č,ć,đ) inside phpMyAdmin works fine.
So if i want to insert into DB characters č,ć,đ they are represented as ?. So basicly that means that encoding or charset or something else is problem.
Also I'm using JDBC driver: mysql-connector-java-5.1.18-bin
From: docs
I want to mention that I didn't have problems, while DB was hosted on godaddy.com server
In addition project text encoding (in Eclipse) is set to "Inherited from container (CP1250)", also I tried with UTF-8 but that didn't help me.
I think you can do as follow
1 first you should set the mysql encodding to utf-8;
2 second when you connection db you should set the connection properties as follow
you can try this
jdbc:mysql://ip:3306/yourDBName?useUnicode=true&characterEncode=UTF-8
I think when you use the jdbc connection may be you lost the useUnicode=true&characterEncode=UTF-8
The unicode character from a rails app appears as ??? in the mysql database (ie when I view through putty or linux console), but my rails app reads it properly and shows as intended.I have another java application which reads from the rails database and stores the values in its own database. and try to show in from its database. But in the webpage, it appears like ??? instead of the unicode characters.
How is that the rails application is able to show it properly and not the java application. Do I need to specify any encoding within the java application?
You really need to find out whether it's the Java app that's wrong, the Rails app that's wrong, or both. Use PuTTY or a Linux console isn't a great way of checking this, as they may well not support the relevant Unicode characters. Ideally, you should find a GUI which you can connect to the database, and use that to check the values. Alternatively, find some MySQL functions which will return the Unicode code points directly.
It's quite possible that the Rails app is doing the wrong thing, but in a reversible way (possibly not always reversible - you may just be lucky at the moment). I've seen this before, where a developer has consistently used the same incorrect code page when both encoding and decoding text, and managed to get the right results out without actually storing the correct data. Obviously that screws up any other system trying to get at the same data.
You may want to check the connection parameters: http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
I guess your Java application may use wrong encoding when reading from rails' database, wrong encoding of its own database or in connection with it.
I'm running into an encoding issue that has stumped me for a few weeks and nothing seems to work. I have a website that works fine on my local machine, but when I push the jsp files to a Linux box for review, characters that previously rendered fine are now displaying as funky characters.
For some reason, some characters display just fine, but other characters will not encode properly. All text on the page is being read from java .properties files and output to the page using beans.
I've added a meta tag to the page to set encoding, which did nothing. I also added <%# page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> but this did nothing on the linux box and actually made the encoding errors appear on my local windows machine.
Any help would be greatly appreciated.
Check that the method loading the properties is using the character encoding that the property files are actually written in.
Without explicit setting this, the default encoding for the file system is used, and it is ISO-Latin-1 on Windows, and UTF-8 on some Linux distributions.
The following need to play together for character encoding to work properly in Nixes and Nuxes:
file system encoding
database encoding (does not seem to apply)
database connector encoding
Java-internal string encoding (UTF-16, if I remember correctly)
Java output encoding
HTML page encoding
With your page directive, you only addressed the last bullet. In other words, you are instructing the brower to decode the page as UTF-8, but that's not what you are sending.
Take a look at this (admittedly a few years old) paper, chapter 11 in particular.
Also, check the physical files on both machines. I've seen several FTP clients muck up files during transfer. A quick check is to push your file as html instead of jsp. You'll get garbage for all the <% %> sequences, but the other text should show up unchanged. You've also taken the app server out of the equation. If the text is still funky, it's your FTP or WebDAV client trying to "help".
Look at the http headers sent by the server. That is the first place the browser looks for encoding before anything else.