Hi,

Applying compression filter to response with non-default character encoding will mess 
the output. 
The reason is CompressionServletResponseWrapper.getWriter() returns writer with 
system-default encoding. 
In my case response is UTF-8 and system-default encoding is ISO-something (Latin-1). I 
get bunch of '?' instead of Cyrillic characters.

Attached patch fixes the problem.

Regards, Anton
Index: CompressionServletResponseWrapper.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-tomcat-4.0/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java,v
retrieving revision 1.6
diff -u -r1.6 CompressionServletResponseWrapper.java
--- CompressionServletResponseWrapper.java      18 Jun 2002 19:53:26 -0000      1.6
+++ CompressionServletResponseWrapper.java      9 Jul 2002 08:55:53 -0000
@@ -259,7 +259,18 @@
         if (debug > 1) {
             System.out.println("stream is set to "+stream+" in getWriter");
         }
-        writer = new PrintWriter(stream);
+        final String charEnc = origResponse.getCharacterEncoding();
+        if (debug > 1) {
+            System.out.println("character encoding is " + charEnc);
+        }
+        // HttpServletResponse.getCharacterEncoding() shouldn't return null
+        // according the spec, so feel free to remove that "if"
+        if (charEnc != null) {
+            writer = new PrintWriter(new OutputStreamWriter(stream, charEnc));
+        } else {
+            writer = new PrintWriter(stream);
+        }
+
         return (writer);
 
     }

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to