globe: Problem mit Charset in simplen ProxyServlet

n'abend,

in meinem kleinen billigen ProxyServlet habe ich ein Problem mit dem Charset. Prinzipiell sollte alles UTF-8 sein. Die Quelle ist definitiv UTF-8, aber das Servlet liefert mir (offenbar) Latin1. Ich verstehe schlicht nicht, wie das passieren kann.

ProxyServlet:
 * http://rodneyrehm.de/t/utf8problem/DataProxyServlet.java

Daten vor dem ProxyServlet:
 * http://rodneyrehm.de/t/utf8problem/source_header.txt
 * http://rodneyrehm.de/t/utf8problem/source_data.xml

Daten nach dem ProxyServlet:
 * http://rodneyrehm.de/t/utf8problem/result_header.txt
 * http://rodneyrehm.de/t/utf8problem/result_data.xml

Kann mir jemand erklären was hier nicht so läuft, wie es sollte?

package de.foobar.baz.client.servlets;  
  
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.io.PrintWriter;  
import java.net.MalformedURLException;  
import java.net.URL;  
import java.net.URLConnection;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import ch.foobar.baz.client.servlets.BasebazServlet;  
  
public class DataProxyServlet extends BasebazServlet  
{  
  
  
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
 {  
  String demoproHost = this.mConf.get( "demopro.host" );  
  if( "".equals( demoproHost ) )  
  {  
   throw new IOException( "Could not read from source because configuration-property demopro.host is not set." );  
  }  
  
  BufferedWriter out = new BufferedWriter( new OutputStreamWriter( response.getOutputStream(), "UTF-8" ) );  
  
  try  
  {  
   String inputLine;  
   URL url = new URL("http://"+ demoproHost +"/data.php?" + request.getQueryString() );  
  
   URLConnection urlcon = url.openConnection();  
   urlcon.connect();  
   response.setContentType( urlcon.getContentType() );  
  
   BufferedReader in = new BufferedReader( new InputStreamReader( urlcon.getInputStream(), "UTF-8" ) );  
  
   while( (inputLine = in.readLine()) != null )  
   {  
    out.write( inputLine );  
   }  
   in.close();  
  }  
  catch( MalformedURLException me )  
  {  
   System.out.println(me);  
  }  
  
  out.flush();  
  out.close();  
 }  
  
}

weiterhin schönen abend...

--
#selfhtml hat ein Forum?
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  1. Hallo,

    response.setContentType( urlcon.getContentType() );

    Wenn urlcon.getContentType() lediglich "text/html" und nicht "text/html; charset=UTF-8" zurückliefert, so wird vom Servlet-Standard Latin1 als Encoding angenommen, zumindest wenn ich die Servlet-Spec richtig verstehe.

    Viele Grüße,
    Christian

    1. n'abend,

      response.setContentType( urlcon.getContentType() );

      Wenn urlcon.getContentType() lediglich "text/html" und nicht "text/html; charset=UTF-8" zurückliefert, so wird vom Servlet-Standard Latin1 als Encoding angenommen, zumindest wenn ich die Servlet-Spec richtig verstehe.

      Die Header werden richtig gesetzt, siehe Auszug von LiveHTTPHeaders:
      Content-Type: application/xml;charset=UTF-8

      weiterhin schönen abend...

      --
      #selfhtml hat ein Forum?
      sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  2. Hallo globe.

    Ich hab keine Ahnung von Servlets etc., aber kann es sein, dass dir vielleicht noch irgendein Cache einen Streich spielt und deine Änderungen nicht wirksam werden?
    Bloß so ein Gedanke...

    Servus,
    Flo

    1. n'abend,

      Ich hab keine Ahnung von Servlets etc., aber kann es sein, dass dir vielleicht noch irgendein Cache einen Streich spielt und deine Änderungen nicht wirksam werden?

      nein, leider nicht. Wäre auch zu einfach gewesen.... :/

      Es liegt definitiv an diesem vermaledeiten Stück Java-Kot.

      weiterhin schönen abend...

      --
      #selfhtml hat ein Forum?
      sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|