diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
index 08920a2..bbd432a 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -260,7 +260,7 @@
     setApiHeaders(res, JSON);
     res.setStatus(SC_OK);
 
-    Writer writer = getWriter(res);
+    Writer writer = newWriter(res);
     newGsonBuilder(req).create().toJson(src, typeOfSrc, writer);
     writer.write('\n');
     writer.close();
@@ -284,7 +284,7 @@
   protected Writer startRenderText(HttpServletRequest req, HttpServletResponse res,
       String contentType) throws IOException {
     setApiHeaders(res, contentType);
-    return getWriter(res);
+    return newWriter(res);
   }
 
   /**
@@ -322,7 +322,7 @@
     res.setStatus(statusCode);
     setApiHeaders(res, TEXT);
     setCacheHeaders(res);
-    Writer out = getWriter(res);
+    Writer out = newWriter(res);
     out.write(message);
     out.close();
   }
@@ -360,7 +360,11 @@
     setCacheHeaders(res);
   }
 
-  private Writer getWriter(HttpServletResponse res) throws IOException {
-    return new OutputStreamWriter(res.getOutputStream(), res.getCharacterEncoding());
+  protected Writer newWriter(HttpServletResponse res) throws IOException {
+    return newWriter(res.getOutputStream(), res);
+  }
+
+  protected static Writer newWriter(OutputStream os, HttpServletResponse res) throws IOException {
+    return new OutputStreamWriter(os, res.getCharacterEncoding());
   }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
index c469962..e189a4f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -38,7 +38,6 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.OutputStreamWriter;
 import java.util.Arrays;
 import java.util.Map;
 import java.util.Set;
@@ -138,8 +137,7 @@
         return;
       }
 
-      try (OutputStream out = BaseEncoding.base64()
-          .encodingStream(new OutputStreamWriter(res.getOutputStream()))) {
+      try (OutputStream out = BaseEncoding.base64().encodingStream(newWriter(res))) {
         formatDiff(repo, oldTree, newTree, view.getPathPart(), new DiffFormatter(out));
       }
     } finally {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
index c72a118..ec6c600 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -50,7 +50,6 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.util.Collection;
 import java.util.List;
@@ -117,7 +116,7 @@
       data.put("title", title);
 
       try (OutputStream out = startRenderStreamingHtml(req, res, "gitiles.logDetail", data);
-          Writer w = new OutputStreamWriter(out)) {
+          Writer w = newWriter(out, res)) {
         new LogSoyData(req, access, pretty)
             .renderStreaming(paginator, null, renderer, w, df);
       }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
index 0a4003d..4e726dd 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -32,7 +32,6 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.util.List;
 import java.util.Map;
@@ -99,7 +98,7 @@
       if (paginator != null) {
         DateFormatter df = new DateFormatter(access, Format.DEFAULT);
         try (OutputStream out = startRenderStreamingHtml(req, res, "gitiles.repositoryIndex", data);
-            Writer w = new OutputStreamWriter(out)) {
+            Writer w = newWriter(out, res)) {
           new LogSoyData(req, access, "oneline")
               .renderStreaming(paginator, "HEAD", renderer, w, df);
         }
