2012-03-22 12 views
7

Tomcat nie koduje poprawnie Literały z ciągów zawierające znaki Unicode. Problem występuje na serwerze Linux, ale nie na moim komputerze programistycznym (Windows). Wpływa na TYLKO ciągi literowe (nie ciągi odczytane z DB lub z pliku !!!).Jak używać UTF-8 z tomcat

  • mam ustawić URIEncoding="utf-8" w znaczniku Connector (server.xml).
  • Użyłem setCharacterEncoding().
  • Sprawdziłem śledzenie stosu (bez filtrów, które mogą ustawiać kodowanie).
  • Mam ustawiony środowiska LANG zmienną
  • I cheched nagłówkach HTTP i są prawidłowe (Content-Type = text/plain; charset = UTF-8)
  • sprawdziłem kodowanie w przeglądarce i jest poprawne (UTF-8)

Żadne z powyższych nie działa. Jakieś pomysły na temat tego, czego może mi brakować?

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

Powyższe pokazuje to w przeglądarce. ÎÎ »Î» Î · νικά Latin

+2

Upewnij się, że źródłowy plik java zawiera zestaw kodowania UTF-8. Używam Notepad ++, aby to sprawdzić. Otwórz plik i sprawdź menu "Kodowanie". Jeśli kodowanie nie jest UTF, przetnij całą zawartość pliku źródłowego, zmień kodowanie, wklej zawartość ze schowka i zapisz plik źródłowy. –

+0

Po wyświetleniu odpowiedzi serwera w edytorze szesnastkowym, jaka jest faktyczna sekwencja bajtów zwrócona? Co to jest kodowanie pliku źródłowego? – Mikaveli

+0

* "Problem występuje na serwerze Linux, ale nie na moim komputerze programistycznym (Windows)." * W jaki sposób wdrażasz system Linux? Czy przesyłasz pliki jeden po drugim? Jeśli tak to jak? Przez FTP? Jeśli tak, czy przesyłasz w trybie binarnym? – BalusC

Odpowiedz

4

Można wymusić kodowanie plików, gdy javac odczytuje je, przekazując kodowanie "utf-8" lub -encoding "iso-8859-1" podczas kompilacji. Tylko upewnij się, że pasuje do tego, co koduje twoje pliki .java są faktycznie zakodowane jako.

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

kodowania -encoding ustawiona nazwę kodowania pliku źródłowego, takiego jak EUC-JP i UTF-8. Jeśli nie podano -encoding, używany jest domyślny konwerter platformy.

+0

to lub użyj sekwencji unikodowych Unicode w twoim kodzie java zamiast znaków. – jtahlborn

3

Spróbuj ustawić właściwość systemu file.encoding np. -Dfile.encoding=utf-8 w linii poleceń JVM Linux

+0

Jesteś bardzo blisko. Musiałem dodać to podczas uruchamiania javac. To, co zdezorientowało mnie, to że JA usunąłem javac bez tej opcji i działało to dobrze. Jednak gdy ant dzwoniło javac prawdopodobnie ustawiało inne domyślne kodowanie. – idrosid

+0

Rozwiązało to dla mnie problem polegający na tym, że mój plik .jsp zawierał fragment pliku HTML zakodowany w UTF-8. Dodanie tego parametru spowodowało, że plik został poprawnie załadowany. – JBCP

+0

Więcej opcji znajduje się w http: // stackoverflow.com/questions/11342884/change-tomcats-charset-defaultcharset-in-windows –