Как использовать UTF-8 с tomcat

Tomcat неправильно кодирует строковые литералы, содержащие символы юникода. Проблема возникает на сервере Linux, но не на моей машине разработки (Windows). Это влияет только на строковые литералы (не строки, считываемые из БД или из файла!!!).

  • я поставил URIEncoding="utf-8" в теге соединителя (server.XML.)
  • я использовал setCharacterEncoding().
  • Я проверил трассировку стека (нет фильтров, которые могли бы установить кодировку).
  • я поставил переменная среды LANG
  • Я чечед заголовки HTTP, и они правильные (Content-Type=text / plain; charset=utf-8)
  • Я проверил кодировку в браузере, и это правильно (UTF-8)

ничего из вышеперечисленного работает. Есть идеи, чего мне не хватает?

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();
}

выше показано это в браузере. - "Î"ηνÎ1κΠлатинского

2 ответов


вы можете принудительно кодировать файлы, когда javac читает их, передавая кодировку "utf-8" или кодировку "iso-8859-1" при компиляции. Просто убедитесь, что он соответствует вашей кодировке .файлы java фактически кодируются как.

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

-encoding encoding задайте имя кодировки исходного файла, например EUC-JP и UTF-8. Если кодировка не указана, платформа по умолчанию используется конвертер.


попробуйте установить файл.свойство системы кодирования, например -Dfile.encoding=utf-8 в командной строке Linux JVM