How to use UTF-8 with tomcat

12,989

Solution 1

You can force the encoding of files when javac reads them by passing in -encoding 'utf-8' or -encoding 'iso-8859-1' when compiling. Just make sure that it matches whatever encoding your .java files are actually encoded as.

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html

-encoding encoding Set the source file encoding name, such as EUC-JP and UTF-8. If -encoding is not specified, the platform default converter is used.

Solution 2

Try setting the file.encoding system property e.g. -Dfile.encoding=utf-8 on the Linux JVM command line

Share:
12,989
idrosid
Author by

idrosid

Updated on June 13, 2022

Comments

  • idrosid
    idrosid almost 2 years

    Tomcat does not encode correctly String literals that contain unicode characters. The problem occurs at a Linux server but not on my development machine (Windows). It affects ONLY String literals (not Strings read from DB or from file!!!).

    • I have set the URIEncoding="utf-8" at the Connector tag (server.xml).
    • I have used setCharacterEncoding().
    • I cheched the stack trace (no filters that might set encoding).
    • I have set the LANG environment variable
    • I cheched the HTTP Headers and they are correct (Content-Type=text/plain;charset=utf-8)
    • I checked the encoding at the browser and it is correct (UTF-8)

    Nothing of the above works. Any ideas on what I might be missing?

    public class Test extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/plain;");
    
        Writer w = resp.getWriter();
        w.write("Μαλακία Latin"); //Some unicode characters
        w.close();
    }
    

    The above shows this at the browser. Îλληνικά Latin