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 7990267..6f1f247 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -33,7 +33,8 @@
 import org.joda.time.Instant;
 
 import java.io.IOException;
-import java.io.PrintWriter;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
 import java.lang.reflect.Type;
 import java.util.Map;
 
@@ -223,14 +224,14 @@
     setApiHeaders(res, JSON);
     res.setStatus(SC_OK);
 
-    PrintWriter writer = res.getWriter();
+    Writer writer = getWriter(res);
     new GsonBuilder()
       .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
       .setPrettyPrinting()
       .generateNonExecutableJson()
       .create()
       .toJson(src, typeOfSrc, writer);
-    writer.print('\n');
+    writer.write('\n');
     writer.close();
   }
 
@@ -241,10 +242,10 @@
    * @param contentType contentType to set.
    * @return the response's writer.
    */
-  protected PrintWriter startRenderText(HttpServletRequest req, HttpServletResponse res,
+  protected Writer startRenderText(HttpServletRequest req, HttpServletResponse res,
       String contentType) throws IOException {
     setApiHeaders(res, contentType);
-    return res.getWriter();
+    return getWriter(res);
   }
 
   /**
@@ -262,10 +263,9 @@
    * @param res in-progress response.
    * @return the response's writer.
    */
-  protected PrintWriter startRenderText(HttpServletRequest req, HttpServletResponse res)
+  protected Writer startRenderText(HttpServletRequest req, HttpServletResponse res)
       throws IOException {
-    setApiHeaders(res, TEXT);
-    return res.getWriter();
+    return startRenderText(req, res, TEXT.getMimeType());
   }
 
   /**
@@ -283,7 +283,7 @@
     res.setStatus(statusCode);
     setApiHeaders(res, TEXT);
     setCacheHeaders(res);
-    PrintWriter out = res.getWriter();
+    Writer out = getWriter(res);
     out.write(message);
     out.close();
   }
@@ -320,4 +320,8 @@
     res.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename);
     setCacheHeaders(res);
   }
+
+  private Writer getWriter(HttpServletResponse res) throws IOException {
+    return new OutputStreamWriter(res.getOutputStream(), res.getCharacterEncoding());
+  }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
index 893089e..20b0367 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
@@ -32,7 +32,7 @@
 import org.eclipse.jgit.lib.Repository;
 
 import java.io.IOException;
-import java.io.PrintWriter;
+import java.io.Writer;
 import java.util.List;
 import java.util.Map;
 
@@ -64,7 +64,7 @@
     if (name == null) {
       return;
     }
-    PrintWriter out = startRenderText(req, res);
+    Writer out = startRenderText(req, res);
     out.write(RefServlet.sanitizeRefForText(name));
     out.close();
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
index 366ed4d..72b3d0f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
@@ -35,7 +35,7 @@
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
-import java.io.PrintWriter;
+import java.io.Writer;
 import java.util.Arrays;
 import java.util.Map;
 import java.util.Set;
@@ -123,7 +123,7 @@
       return;
     }
 
-    PrintWriter writer = startRenderText(req, res);
+    Writer writer = startRenderText(req, res);
     for (RepositoryDescription repo : descs.values()) {
       for (String name : branches) {
         String ref = repo.branches.get(name);
@@ -131,11 +131,11 @@
           // Print stub (forty '-' symbols)
           ref = "----------------------------------------";
         }
-        writer.print(ref);
-        writer.print(' ');
+        writer.write(ref);
+        writer.write(' ');
       }
-      writer.print(GitilesUrls.NAME_ESCAPER.apply(repo.name));
-      writer.print('\n');
+      writer.write(GitilesUrls.NAME_ESCAPER.apply(repo.name));
+      writer.write('\n');
     }
     writer.flush();
     writer.close();
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
index d134460..fe2ad47 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -56,7 +56,7 @@
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.PrintWriter;
+import java.io.Writer;
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Pattern;
@@ -181,7 +181,7 @@
           // under the assumption that any hint we can give to a browser that
           // this is base64 data might cause it to try to decode it and render
           // as HTML, which would be bad.
-          PrintWriter writer = startRenderText(req, res, null);
+          Writer writer = startRenderText(req, res, null);
           res.setHeader(MODE_HEADER, String.format("%06o", wr.type.mode.getBits()));
           try (OutputStream out = BaseEncoding.base64().encodingStream(writer)) {
             rw.getObjectReader().open(wr.id).copyTo(out);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
index 4eaf7f3..bf0f75d 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
@@ -34,7 +34,7 @@
 import org.eclipse.jgit.transport.RefAdvertiser;
 
 import java.io.IOException;
-import java.io.PrintWriter;
+import java.io.Writer;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -188,9 +188,9 @@
   }
 
   private static class TextRefAdvertiser extends RefAdvertiser {
-    private final PrintWriter writer;
+    private final Writer writer;
 
-    private TextRefAdvertiser(PrintWriter writer) {
+    private TextRefAdvertiser(Writer writer) {
       this.writer = writer;
     }
 
@@ -201,7 +201,7 @@
 
     @Override
     protected void writeOne(CharSequence line) throws IOException {
-      writer.print(line);
+      writer.append(line);
     }
 
     @Override
