mardi 17 juillet 2012

Servlets et encoding...

J'ai eu des petit soucis avec le charset...

Un svi envoyait bien "text/csv; charset=utf-8" (curl) mais pour une raison x ou y, mon ihm qui l'appelait voyait "text/plain;charset=ISO-8859-1" ce qui faisait que le fichier était mal affiché.

Dans le code ci-dessous, j'ouvre une connection et récupère le charset afin d'initialiser l'InputStreamReader et commencer les lectures...
        URL url = new URL(sviUrl);
        URLConnection conn = url.openConnection();  
        conn.connect();
        InputStream in = null;
        try {
            String charset = "ISO-8859-1";
            String contentType = conn.getContentType(); 
            if (contentType != null && contentType.indexOf(";charset=") >= 0) {
                contentType = contentType.substring(contentType.indexOf(";charset=")+9);
                charset = contentType.trim();
            }
            in = conn.getInputStream();
            InputStreamReader inr = new InputStreamReader(url.openStream(), charset);
            Writer out = resp.getWriter();
            try {
                IOUtils.copy(inr, out);
            } finally {
                inr.close();
            }
        } finally {
            if (in != null) {
                in.close();
            }
        }

Aucun commentaire: