Tomcat no codifica correctamente los literales de cadena que contienen caracteres Unicode. El problema ocurre en un servidor Linux pero no en mi máquina de desarrollo (Windows). Afecta SOLAMENTE a los literales de cadena (¡no a las cadenas leídas desde la base de datos o desde el archivo!).Cómo utilizar UTF-8 con tomcat
- He configurado el
URIEncoding="utf-8"
en la etiqueta del conector (server.xml). - He utilizado setCharacterEncoding().
- He revisado el seguimiento de la pila (no hay filtros que puedan establecer la codificación).
- yo he dado la variable de entorno LANG
- I cheched las cabeceras HTTP y son correctos (Content-Type = text/plain; charset = UTF-8)
- he comprobado la codificación en el navegador y es correcto (UTF-8)
Nada de lo anterior funciona. ¿Alguna idea sobre lo que me podría estar perdiendo?
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();
}
Lo anterior muestra esto en el navegador. ii »Î» Î · νικά América
Asegúrate de que el archivo de origen java tenga un conjunto de codificación utf-8. Uso Notepad ++ para verificar esto. Abra el archivo y verifique el menú "Codificación". Si la codificación no es UTF, corte todo el contenido del archivo fuente, cambie la codificación, pegue los contenidos del portapapeles y guarde el archivo fuente. –
Si ve la respuesta del servidor en un editor hexadecimal, ¿cuál es la secuencia de bytes actual devuelta? ¿Cuál es la codificación de su archivo fuente? – Mikaveli
* "El problema ocurre en un servidor Linux pero no en mi máquina de desarrollo (Windows)." * ¿Cómo se está implementando en Linux? ¿Estás transfiriendo archivos uno por uno? ¿Si es así, cómo? Por FTP? Si es así, ¿estás transfiriéndote en modo binario? – BalusC