Как использовать UTF-8 с котом - PullRequest
7 голосов
/ 22 марта 2012

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

  • Я установил URIEncoding="utf-8" в теге Connector (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();
}

Выше показано это в браузере. ÎÎ »Î» Î · νικά Латинский

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

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

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

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

3 голосов
/ 22 марта 2012

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

...