diff --git a/reviewboard/diffviewer/admin.py b/reviewboard/diffviewer/admin.py
index 49facaa4fa693a55f39a7d27d27ecc95d2fc0749..f4277bb23e1fb083951f5a0669f7a6747cd71547 100644
--- a/reviewboard/diffviewer/admin.py
+++ b/reviewboard/diffviewer/admin.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from django.contrib import admin
 from django.utils.translation import ugettext_lazy as _
 from pygments import highlight
diff --git a/reviewboard/diffviewer/chunk_generator.py b/reviewboard/diffviewer/chunk_generator.py
index 0fc50976a8b0f755aeac2afb3d90110802939b72..29f90668e50b769458111b4e06ddfad90ea45fd8 100644
--- a/reviewboard/diffviewer/chunk_generator.py
+++ b/reviewboard/diffviewer/chunk_generator.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import fnmatch
 import re
 from difflib import SequenceMatcher
@@ -8,6 +10,7 @@ from django.utils.translation import ugettext as _, get_language
 from djblets.log import log_timed
 from djblets.siteconfig.models import SiteConfiguration
 from djblets.util.misc import cache_memoize
+from djblets.util.compat import six
 from djblets.util.compat.six.moves import range
 from pygments import highlight
 from pygments.lexers import get_lexer_for_filename
@@ -109,7 +112,7 @@ class DiffChunkGenerator(object):
             key += 'hl-'
 
         if not self.force_interdiff:
-            key += str(self.filediff.pk)
+            key += six.text_type(self.filediff.pk)
         elif self.interfilediff:
             key += 'interdiff-%s-%s' % (self.filediff.pk,
                                         self.interfilediff.pk)
diff --git a/reviewboard/diffviewer/differ.py b/reviewboard/diffviewer/differ.py
index 13fa607e336621ac6f5f0ea4ef745b043ecf1ee3..13444382a6a0ed94f0f1ec19a52e4954370550b8 100644
--- a/reviewboard/diffviewer/differ.py
+++ b/reviewboard/diffviewer/differ.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import os
 
 from reviewboard.diffviewer.errors import DiffCompatError
diff --git a/reviewboard/diffviewer/diffutils.py b/reviewboard/diffviewer/diffutils.py
index 4527c77abdf480d0b97383daf25d407920701818..026a0c1bfa72e42cc94d585a5c8d9f96fb500848 100644
--- a/reviewboard/diffviewer/diffutils.py
+++ b/reviewboard/diffviewer/diffutils.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import os
 import re
 import subprocess
@@ -76,10 +78,9 @@ def patch(diff, file, filename, request=None):
         failure = p.wait()
 
     if failure:
-        f = open("%s.diff" %
-                 (os.path.join(tempdir, os.path.basename(filename))), "w")
-        f.write(diff)
-        f.close()
+        absolute_path = os.path.join(tempdir, os.path.basename(filename))
+        with open("%s.diff" % absolute_path, 'w') as f:
+            f.write(diff)
 
         log_timer.done()
 
@@ -97,9 +98,8 @@ def patch(diff, file, filename, request=None):
                 'output': patch_output,
             })
 
-    f = open(newfile, "r")
-    data = f.read()
-    f.close()
+    with open(newfile, "r") as f:
+        data = f.read()
 
     os.unlink(oldfile)
     os.unlink(newfile)
@@ -117,7 +117,7 @@ def get_original_file(filediff, request=None):
 
     SCM exceptions are passed back to the caller.
     """
-    data = ""
+    data = b""
 
     if filediff.source_revision != PRE_CREATION:
         repository = filediff.diffset.repository
diff --git a/reviewboard/diffviewer/errors.py b/reviewboard/diffviewer/errors.py
index cab154a4ed1780164254ecdcf13b63c3cbdfc25c..4cb3f31d794c05b508a76d6701dbcb01bb7abc3a 100644
--- a/reviewboard/diffviewer/errors.py
+++ b/reviewboard/diffviewer/errors.py
@@ -1,3 +1,6 @@
+from __future__ import unicode_literals
+
+
 class UserVisibleError(Exception):
     """A user-visible error shown in the rendered output."""
     pass
diff --git a/reviewboard/diffviewer/evolutions/__init__.py b/reviewboard/diffviewer/evolutions/__init__.py
index e16076b86f000dbe9aa2220810decbe7d57f8542..82ef962ade8a83d7e484989ee119e93cd270323f 100644
--- a/reviewboard/diffviewer/evolutions/__init__.py
+++ b/reviewboard/diffviewer/evolutions/__init__.py
@@ -1,3 +1,6 @@
+from __future__ import unicode_literals
+
+
 SEQUENCE = [
     'add_parent_diffs',
     'filediff_filenames_1024_chars',
diff --git a/reviewboard/diffviewer/evolutions/add_diff_hash.py b/reviewboard/diffviewer/evolutions/add_diff_hash.py
index 170b3846d7ed9e5d72b05ddc935e2f9e7e9dbe68..4fa2e9c825c2918cb29cc51fdbb5de97231a4083 100644
--- a/reviewboard/diffviewer/evolutions/add_diff_hash.py
+++ b/reviewboard/diffviewer/evolutions/add_diff_hash.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from django_evolution.mutations import AddField, RenameField
 from django.db import models
 
diff --git a/reviewboard/diffviewer/evolutions/add_parent_diffs.py b/reviewboard/diffviewer/evolutions/add_parent_diffs.py
index 3409b1faf7ced7e9f184648dd2aeb816c25452db..67d1bd254ccdcecc644eb3cb225feed1bd4534bd 100644
--- a/reviewboard/diffviewer/evolutions/add_parent_diffs.py
+++ b/reviewboard/diffviewer/evolutions/add_parent_diffs.py
@@ -1,5 +1,6 @@
-from django_evolution.mutations import AddField, RenameField
+from __future__ import unicode_literals
 
+from django_evolution.mutations import AddField, RenameField
 from djblets.util.fields import Base64Field
 from djblets.util.dbevolution import FakeChangeFieldType
 
diff --git a/reviewboard/diffviewer/evolutions/diffset_base_commit_id.py b/reviewboard/diffviewer/evolutions/diffset_base_commit_id.py
index 8fca916197267504bb65e3ca43e71886c0ebce7c..22254bbe835e30019652283c2107bb13b41fcadf 100644
--- a/reviewboard/diffviewer/evolutions/diffset_base_commit_id.py
+++ b/reviewboard/diffviewer/evolutions/diffset_base_commit_id.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from django_evolution.mutations import AddField
 from django.db import models
 
diff --git a/reviewboard/diffviewer/evolutions/diffset_basedir.py b/reviewboard/diffviewer/evolutions/diffset_basedir.py
index e51e326fdcc9b063f314ad8fd5303b30741a0ecd..248d843513df7f5eb299fea6ae7992fd8b27d77a 100644
--- a/reviewboard/diffviewer/evolutions/diffset_basedir.py
+++ b/reviewboard/diffviewer/evolutions/diffset_basedir.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from django_evolution.mutations import AddField
 from django.db import models
 
diff --git a/reviewboard/diffviewer/evolutions/diffsethistory_diff_updated.py b/reviewboard/diffviewer/evolutions/diffsethistory_diff_updated.py
index a783f519724df3c76f3679555b5930e3da430ae6..b0fe3bfc034afc45e1adb7fe39e30bdacb41c0b9 100644
--- a/reviewboard/diffviewer/evolutions/diffsethistory_diff_updated.py
+++ b/reviewboard/diffviewer/evolutions/diffsethistory_diff_updated.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from django_evolution.mutations import AddField
 from django.db import models
 
diff --git a/reviewboard/diffviewer/evolutions/filediff_filenames_1024_chars.py b/reviewboard/diffviewer/evolutions/filediff_filenames_1024_chars.py
index 038d5ca6fa9abd918c404635cc63e608514cce50..0a941622cc139ae5e4c32f58fd606bd46e6c71d8 100644
--- a/reviewboard/diffviewer/evolutions/filediff_filenames_1024_chars.py
+++ b/reviewboard/diffviewer/evolutions/filediff_filenames_1024_chars.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from django_evolution.mutations import ChangeField
 
 
diff --git a/reviewboard/diffviewer/evolutions/filediff_status.py b/reviewboard/diffviewer/evolutions/filediff_status.py
index eba72002afe52746e52a54d5c7daa7d2e9cc3a6c..e3c5c5a5a592a0cd1db70813993e292c7286914a 100644
--- a/reviewboard/diffviewer/evolutions/filediff_status.py
+++ b/reviewboard/diffviewer/evolutions/filediff_status.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from django_evolution.mutations import AddField
 from django.db import models
 
diff --git a/reviewboard/diffviewer/evolutions/filediffdata_line_counts.py b/reviewboard/diffviewer/evolutions/filediffdata_line_counts.py
index a64713ad95bb726ec691878a4444984ee7186b80..30b8f11f4703eca830e6ac8c342131f8e054a37c 100644
--- a/reviewboard/diffviewer/evolutions/filediffdata_line_counts.py
+++ b/reviewboard/diffviewer/evolutions/filediffdata_line_counts.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from django_evolution.mutations import AddField
 from django.db import models
 
diff --git a/reviewboard/diffviewer/filetypes.py b/reviewboard/diffviewer/filetypes.py
index ab5828b331fc4b09915c08b8a83b7c67bc483a34..6b659d36bd8e19a771430ae9a09e6264544b2dc3 100644
--- a/reviewboard/diffviewer/filetypes.py
+++ b/reviewboard/diffviewer/filetypes.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import re
 
 
diff --git a/reviewboard/diffviewer/forms.py b/reviewboard/diffviewer/forms.py
index 1f0bb906212f9e2819dc4b0b46becfe264d105d0..1d63925c0fc25544fea056795ce545f1bbd502a6 100644
--- a/reviewboard/diffviewer/forms.py
+++ b/reviewboard/diffviewer/forms.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from django import forms
 from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext as _
diff --git a/reviewboard/diffviewer/managers.py b/reviewboard/diffviewer/managers.py
index fed06db35df76a734ea6c10273f31033de2b9303..d030ed273d974af7af6e03cc9fd78b55f4318b68 100644
--- a/reviewboard/diffviewer/managers.py
+++ b/reviewboard/diffviewer/managers.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import os
 
 from django.db import models
@@ -152,7 +154,7 @@ class DiffSetManager(models.Manager):
                 parent_content = parent_file.data
                 source_rev = parent_file.origInfo
             else:
-                parent_content = ""
+                parent_content = b""
 
                 if parent_commit_id and f.origInfo != PRE_CREATION:
                     source_rev = parent_commit_id
diff --git a/reviewboard/diffviewer/models.py b/reviewboard/diffviewer/models.py
index 3f081d4ac9e0028ce57ce154324e2369e0552ef3..6bacd5d10cbf2e57330a276cbbff32705aa869c6 100644
--- a/reviewboard/diffviewer/models.py
+++ b/reviewboard/diffviewer/models.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import hashlib
 import logging
 
@@ -234,8 +236,8 @@ class FileDiff(models.Model):
             self.diffset.repository.get_scmtool())
 
     def __str__(self):
-        return u"%s (%s) -> %s (%s)" % (self.source_file, self.source_revision,
-                                        self.dest_file, self.dest_detail)
+        return "%s (%s) -> %s (%s)" % (self.source_file, self.source_revision,
+                                       self.dest_file, self.dest_detail)
 
 
 @python_2_unicode_compatible
@@ -287,7 +289,7 @@ class DiffSet(models.Model):
         super(DiffSet, self).save()
 
     def __str__(self):
-        return u"[%s] %s r%s" % (self.id, self.name, self.revision)
+        return "[%s] %s r%s" % (self.id, self.name, self.revision)
 
     class Meta:
         get_latest_by = 'revision'
@@ -311,7 +313,7 @@ class DiffSetHistory(models.Model):
         default=None)
 
     def __str__(self):
-        return u'Diff Set History (%s revisions)' % self.diffsets.count()
+        return 'Diff Set History (%s revisions)' % self.diffsets.count()
 
     class Meta:
         verbose_name_plural = "Diff set histories"
diff --git a/reviewboard/diffviewer/myersdiff.py b/reviewboard/diffviewer/myersdiff.py
index f549b1c42a312a07ffabaa3f350095c7c185b98d..9223f2af5cfca96fa0e9d92ccfa5d3d3411c5b04 100644
--- a/reviewboard/diffviewer/myersdiff.py
+++ b/reviewboard/diffviewer/myersdiff.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from djblets.util.compat.six.moves import range
 
 from reviewboard.diffviewer.differ import Differ
diff --git a/reviewboard/diffviewer/opcode_generator.py b/reviewboard/diffviewer/opcode_generator.py
index 5d34e7427159a28d8d429f99d881a72b00a59ed0..39df7b37019578a8f91f06f70dcb7997db7ed96a 100644
--- a/reviewboard/diffviewer/opcode_generator.py
+++ b/reviewboard/diffviewer/opcode_generator.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import re
 
 from djblets.util.compat import six
diff --git a/reviewboard/diffviewer/parser.py b/reviewboard/diffviewer/parser.py
index d2c2f1a90fad2d6d00c05a3758eb244493234fff..f17a72c67326186fe061343384ab8926ea84a099 100644
--- a/reviewboard/diffviewer/parser.py
+++ b/reviewboard/diffviewer/parser.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import logging
 import re
 
diff --git a/reviewboard/diffviewer/processors.py b/reviewboard/diffviewer/processors.py
index bc2a1e03f9ce77e4b4b05333f4ef97534a48adb1..a0f9133754626e941b334035fe53e70a44089351 100644
--- a/reviewboard/diffviewer/processors.py
+++ b/reviewboard/diffviewer/processors.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import re
 
 
diff --git a/reviewboard/diffviewer/renderers.py b/reviewboard/diffviewer/renderers.py
index a1e230b5ca429e9d2cc721cb6d6ebd90ba5b753c..74df630415fc9d323f9838b1351901524af4642b 100644
--- a/reviewboard/diffviewer/renderers.py
+++ b/reviewboard/diffviewer/renderers.py
@@ -1,8 +1,11 @@
+from __future__ import unicode_literals
+
 from django.conf import settings
 from django.http import HttpResponse
 from django.template import Context
 from django.template.loader import render_to_string
 from django.utils.translation import ugettext as _, get_language
+from djblets.util.compat import six
 from djblets.util.misc import cache_memoize
 
 from reviewboard.diffviewer.chunk_generator import compute_chunk_last_header
@@ -52,7 +55,7 @@ class DiffRenderer(object):
 
             if self.chunk_index < 0 or self.chunk_index >= self.num_chunks:
                 raise UserVisibleError(
-                    _(u'Invalid chunk index %s specified.') % self.chunk_index)
+                    _('Invalid chunk index %s specified.') % self.chunk_index)
 
     def render_to_response(self):
         """Renders the diff to an HttpResponse."""
@@ -99,11 +102,11 @@ class DiffRenderer(object):
             key += 'interdiff-%s-' % filediff.pk
 
             if interfilediff:
-                key += str(interfilediff.pk)
+                key += six.text_type(interfilediff.pk)
             else:
                 key += 'none'
         else:
-            key += str(filediff.pk)
+            key += six.text_type(filediff.pk)
 
         if self.chunk_index is not None:
             key += '-chunk-%s' % self.chunk_index
diff --git a/reviewboard/diffviewer/smdiff.py b/reviewboard/diffviewer/smdiff.py
index 675b9293f486a13077e1f3822883f25ae44cd7b8..0934b750ea81e808f287320c1e27873a8e9ec1c1 100644
--- a/reviewboard/diffviewer/smdiff.py
+++ b/reviewboard/diffviewer/smdiff.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 from difflib import SequenceMatcher
 
 from reviewboard.diffviewer.differ import Differ
diff --git a/reviewboard/diffviewer/templatetags/difftags.py b/reviewboard/diffviewer/templatetags/difftags.py
index a4c416547f1425a4d4c5d458639922a808dafca7..bbc14c4306e45344ec39e9d9c8de9368a0d8b3ed 100644
--- a/reviewboard/diffviewer/templatetags/difftags.py
+++ b/reviewboard/diffviewer/templatetags/difftags.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import re
 
 from django import template
diff --git a/reviewboard/diffviewer/tests.py b/reviewboard/diffviewer/tests.py
index 042fe9c4a62ef470306ed2767ffd5634d813b9fd..8ab95b7112964b28cef98215df7b47ce89b8fb27 100644
--- a/reviewboard/diffviewer/tests.py
+++ b/reviewboard/diffviewer/tests.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import os
 import unittest
 
@@ -156,13 +158,11 @@ class InterestingLinesTest(TestCase):
         self.assertEqual(lines[1][1], (3, '\tdef helloWorld()\n'))
 
     def __get_lines(self, filename):
-        f = open(os.path.join(self.PREFIX, "orig_src", filename), "r")
-        a = f.readlines()
-        f.close()
+        with open(os.path.join(self.PREFIX, "orig_src", filename), "r") as f:
+            a = f.readlines()
 
-        f = open(os.path.join(self.PREFIX, "new_src", filename), "r")
-        b = f.readlines()
-        f.close()
+        with open(os.path.join(self.PREFIX, "new_src", filename), "r") as f:
+            b = f.readlines()
 
         differ = MyersDiffer(a, b)
         differ.add_interesting_lines_for_headers(filename)
@@ -433,20 +433,20 @@ class DiffParserTest(TestCase):
     def test_line_counts(self):
         """Testing DiffParser with insert/delete line counts"""
         diff = (
-            '+ This is some line before the change\n'
-            '- And another line\n'
-            'Index: foo\n'
-            '- One last.\n'
-            '--- README  123\n'
-            '+++ README  (new)\n'
-            '@ -1,1 +1,1 @@\n'
-            '-blah blah\n'
-            '-blah\n'
-            '+blah!\n'
-            '-blah...\n'
-            '+blah?\n'
-            '-blah!\n'
-            '+blah?!\n')
+            b'+ This is some line before the change\n'
+            b'- And another line\n'
+            b'Index: foo\n'
+            b'- One last.\n'
+            b'--- README  123\n'
+            b'+++ README  (new)\n'
+            b'@ -1,1 +1,1 @@\n'
+            b'-blah blah\n'
+            b'-blah\n'
+            b'+blah!\n'
+            b'-blah...\n'
+            b'+blah?\n'
+            b'-blah!\n'
+            b'+blah?!\n')
         files = diffparser.DiffParser(diff).parse()
 
         self.assertEqual(len(files), 1)
@@ -484,21 +484,21 @@ class FileDiffMigrationTests(TestCase):
 
     def setUp(self):
         self.diff = (
-            'diff --git a/README b/README\n'
-            'index d6613f5..5b50866 100644\n'
-            '--- README\n'
-            '+++ README\n'
-            '@ -1,1 +1,1 @@\n'
-            '-blah blah\n'
-            '+blah!\n')
+            b'diff --git a/README b/README\n'
+            b'index d6613f5..5b50866 100644\n'
+            b'--- README\n'
+            b'+++ README\n'
+            b'@ -1,1 +1,1 @@\n'
+            b'-blah blah\n'
+            b'+blah!\n')
         self.parent_diff = (
-            'diff --git a/README b/README\n'
-            'index d6613f5..5b50866 100644\n'
-            '--- README\n'
-            '+++ README\n'
-            '@ -1,1 +1,1 @@\n'
-            '-blah..\n'
-            '+blah blah\n')
+            b'diff --git a/README b/README\n'
+            b'index d6613f5..5b50866 100644\n'
+            b'--- README\n'
+            b'+++ README\n'
+            b'@ -1,1 +1,1 @@\n'
+            b'-blah..\n'
+            b'+blah blah\n')
 
         repository = self.create_repository(tool_name='Test')
         diffset = DiffSet.objects.create(name='test',
@@ -683,10 +683,9 @@ class DbTests(TestCase):
         diffset = DiffSet.objects.create(name='test',
                                          revision=1,
                                          repository=repository)
-        f = open(os.path.join(self.PREFIX, "diffs", "context", "foo.c.diff"),
-                 "r")
-        data = f.read()
-        f.close()
+        with open(os.path.join(self.PREFIX, "diffs", "context",
+                               "foo.c.diff")) as f:
+            data = f.read()
 
         filediff1 = FileDiff(diff=data,
                              diffset=diffset)
@@ -705,13 +704,13 @@ class DiffSetManagerTests(SpyAgency, TestCase):
     def test_creating_with_diff_data(self):
         """Test creating a DiffSet from diff file data"""
         diff = (
-            'diff --git a/README b/README\n'
-            'index d6613f5..5b50866 100644\n'
-            '--- README\n'
-            '+++ README\n'
-            '@ -1,1 +1,1 @@\n'
-            '-blah..\n'
-            '+blah blah\n'
+            b'diff --git a/README b/README\n'
+            b'index d6613f5..5b50866 100644\n'
+            b'--- README\n'
+            b'+++ README\n'
+            b'@ -1,1 +1,1 @@\n'
+            b'-blah..\n'
+            b'+blah blah\n'
         )
 
         repository = self.create_repository(tool_name='Test')
@@ -732,13 +731,13 @@ class UploadDiffFormTests(SpyAgency, TestCase):
     def test_creating_diffsets(self):
         """Test creating a DiffSet from form data"""
         diff = (
-            'diff --git a/README b/README\n'
-            'index d6613f5..5b50866 100644\n'
-            '--- README\n'
-            '+++ README\n'
-            '@ -1,1 +1,1 @@\n'
-            '-blah..\n'
-            '+blah blah\n'
+            b'diff --git a/README b/README\n'
+            b'index d6613f5..5b50866 100644\n'
+            b'--- README\n'
+            b'+++ README\n'
+            b'@ -1,1 +1,1 @@\n'
+            b'-blah..\n'
+            b'+blah blah\n'
         )
 
         diff_file = SimpleUploadedFile('diff', diff,
@@ -774,31 +773,31 @@ class UploadDiffFormTests(SpyAgency, TestCase):
             return True
 
         diff = (
-            'diff --git a/README b/README\n'
-            'index d6613f5..5b50866 100644\n'
-            '--- README\n'
-            '+++ README\n'
-            '@ -1,1 +1,1 @@\n'
-            '-blah blah\n'
-            '+blah!\n'
+            b'diff --git a/README b/README\n'
+            b'index d6613f5..5b50866 100644\n'
+            b'--- README\n'
+            b'+++ README\n'
+            b'@ -1,1 +1,1 @@\n'
+            b'-blah blah\n'
+            b'+blah!\n'
         )
         parent_diff_1 = (
-            'diff --git a/README b/README\n'
-            'index d6613f4..5b50865 100644\n'
-            '--- README\n'
-            '+++ README\n'
-            '@ -1,1 +1,1 @@\n'
-            '-blah..\n'
-            '+blah blah\n'
+            b'diff --git a/README b/README\n'
+            b'index d6613f4..5b50865 100644\n'
+            b'--- README\n'
+            b'+++ README\n'
+            b'@ -1,1 +1,1 @@\n'
+            b'-blah..\n'
+            b'+blah blah\n'
         )
         parent_diff_2 = (
-            'diff --git a/UNUSED b/UNUSED\n'
-            'index 1234567..5b50866 100644\n'
-            '--- UNUSED\n'
-            '+++ UNUSED\n'
-            '@ -1,1 +1,1 @@\n'
-            '-foo\n'
-            '+bar\n'
+            b'diff --git a/UNUSED b/UNUSED\n'
+            b'index 1234567..5b50866 100644\n'
+            b'--- UNUSED\n'
+            b'+++ UNUSED\n'
+            b'@ -1,1 +1,1 @@\n'
+            b'-foo\n'
+            b'+bar\n'
         )
         parent_diff = parent_diff_1 + parent_diff_2
 
@@ -835,27 +834,27 @@ class UploadDiffFormTests(SpyAgency, TestCase):
     def test_mercurial_parent_diff_base_rev(self):
         """Testing that the correct base revision is used for Mercurial diffs"""
         diff = (
-            '# Node ID a6fc203fee9091ff9739c9c00cd4a6694e023f48\n'
-            '# Parent  7c4735ef51a7c665b5654f1a111ae430ce84ebbd\n'
-            'diff --git a/doc/readme b/doc/readme\n'
-            '--- a/doc/readme\n'
-            '+++ b/doc/readme\n'
-            '@@ -1,3 +1,3 @@\n'
-            ' Hello\n'
-            '-\n'
-            '+...\n'
-            ' goodbye\n'
+            b'# Node ID a6fc203fee9091ff9739c9c00cd4a6694e023f48\n'
+            b'# Parent  7c4735ef51a7c665b5654f1a111ae430ce84ebbd\n'
+            b'diff --git a/doc/readme b/doc/readme\n'
+            b'--- a/doc/readme\n'
+            b'+++ b/doc/readme\n'
+            b'@@ -1,3 +1,3 @@\n'
+            b' Hello\n'
+            b'-\n'
+            b'+...\n'
+            b' goodbye\n'
         )
 
         parent_diff = (
-            '# Node ID 7c4735ef51a7c665b5654f1a111ae430ce84ebbd\n'
-            '# Parent  661e5dd3c4938ecbe8f77e2fdfa905d70485f94c\n'
-            'diff --git a/doc/newfile b/doc/newfile\n'
-            'new file mode 100644\n'
-            '--- /dev/null\n'
-            '+++ b/doc/newfile\n'
-            '@@ -0,0 +1,1 @@\n'
-            '+Lorem ipsum\n'
+            b'# Node ID 7c4735ef51a7c665b5654f1a111ae430ce84ebbd\n'
+            b'# Parent  661e5dd3c4938ecbe8f77e2fdfa905d70485f94c\n'
+            b'diff --git a/doc/newfile b/doc/newfile\n'
+            b'new file mode 100644\n'
+            b'--- /dev/null\n'
+            b'+++ b/doc/newfile\n'
+            b'@@ -0,0 +1,1 @@\n'
+            b'+Lorem ipsum\n'
         )
 
         try:
diff --git a/reviewboard/diffviewer/views.py b/reviewboard/diffviewer/views.py
index 1d246cf9fffe883b9b1da57b2d95001e55e5c7ef..fe45cd913636d1e8f1d624bad185ad7dc5fb024e 100644
--- a/reviewboard/diffviewer/views.py
+++ b/reviewboard/diffviewer/views.py
@@ -1,3 +1,5 @@
+from __future__ import unicode_literals
+
 import logging
 import traceback
 
