diff --git a/django/test/testcases.py b/django/test/testcases.py
index dcab078553..95a6d23cee 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -12,6 +12,7 @@ from django.http import QueryDict
 from django.test import _doctest as doctest
 from django.test.client import Client
 from django.utils import simplejson
+from django.utils.encoding import smart_str
 
 normalize_long_ints = lambda s: re.sub(r'(?<![\w])(\d+)L(?![\w])', '\\1', s)
 
@@ -264,6 +265,7 @@ class TestCase(unittest.TestCase):
         self.assertEqual(response.status_code, status_code,
             "Couldn't retrieve page: Response code was %d (expected %d)'" %
                 (response.status_code, status_code))
+        text = smart_str(text, response._charset)
         real_count = response.content.count(text)
         if count is not None:
             self.assertEqual(real_count, count,
@@ -282,8 +284,9 @@ class TestCase(unittest.TestCase):
         self.assertEqual(response.status_code, status_code,
             "Couldn't retrieve page: Response code was %d (expected %d)'" %
                 (response.status_code, status_code))
-        self.assertEqual(response.content.count(text), 0,
-                         "Response should not contain '%s'" % text)
+        text = smart_str(text, response._charset)
+        self.assertEqual(response.content.count(text),
+             0, "Response should not contain '%s'" % text)
 
     def assertFormError(self, response, form, field, errors):
         """
diff --git a/tests/regressiontests/test_client_regress/models.py b/tests/regressiontests/test_client_regress/models.py
index 98c61523a4..fa12c5d69a 100644
--- a/tests/regressiontests/test_client_regress/models.py
+++ b/tests/regressiontests/test_client_regress/models.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 """
 Regression tests for the Test Client, especially the customized assertions.
 """
@@ -10,6 +11,13 @@ from django.core.exceptions import SuspiciousOperation
 from django.template import TemplateDoesNotExist, TemplateSyntaxError
 
 class AssertContainsTests(TestCase):
+    def setUp(self):
+        self.old_templates = settings.TEMPLATE_DIRS
+        settings.TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 'templates'),)
+
+    def tearDown(self):
+        settings.TEMPLATE_DIRS = self.old_templates
+
     def test_contains(self):
         "Responses can be inspected for content, including counting repeated substrings"
         response = self.client.get('/test_client_regress/no_template_view/')
@@ -56,6 +64,20 @@ class AssertContainsTests(TestCase):
         except AssertionError, e:
             self.assertEquals(str(e), "Found 0 instances of 'thrice' in response (expected 3)")
 
+    def test_unicode_contains(self):
+        "Unicode characters can be found in template context"
+        #Regression test for #10183
+        r = self.client.get('/test_client_regress/check_unicode/')
+        self.assertContains(r, u'さかき')
+        self.assertContains(r, '\xe5\xb3\xa0'.decode('utf-8'))
+
+    def test_unicode_not_contains(self):
+        "Unicode characters can be searched for, and not found in template context"
+        #Regression test for #10183
+        r = self.client.get('/test_client_regress/check_unicode/')
+        self.assertNotContains(r, u'はたけ')
+        self.assertNotContains(r, '\xe3\x81\xaf\xe3\x81\x9f\xe3\x81\x91'.decode('utf-8'))
+
 class AssertTemplateUsedTests(TestCase):
     fixtures = ['testdata.json']
 
diff --git a/tests/regressiontests/test_client_regress/templates/unicode.html b/tests/regressiontests/test_client_regress/templates/unicode.html
new file mode 100644
index 0000000000..bdb6c91a8f
--- /dev/null
+++ b/tests/regressiontests/test_client_regress/templates/unicode.html
@@ -0,0 +1,5 @@
+* 峠 (とうげ tōge "mountain pass")
+* 榊 (さかき sakaki "tree, genus Cleyera")
+* 辻 (つじ tsuji "crossroads, street")
+* 働 (どう dō, はたら hatara(ku) "work")
+* 腺 (せん sen, "gland")
diff --git a/tests/regressiontests/test_client_regress/urls.py b/tests/regressiontests/test_client_regress/urls.py
index ca21e18817..40aaf07217 100644
--- a/tests/regressiontests/test_client_regress/urls.py
+++ b/tests/regressiontests/test_client_regress/urls.py
@@ -9,4 +9,5 @@ urlpatterns = patterns('',
     (r'^login_protected_redirect_view/$', views.login_protected_redirect_view),
     (r'^set_session/$', views.set_session_view),
     (r'^check_session/$', views.check_session_view),
+    (r'^check_unicode/$', views.return_unicode),
 )
diff --git a/tests/regressiontests/test_client_regress/views.py b/tests/regressiontests/test_client_regress/views.py
index 9cd786d86b..6d0972add2 100644
--- a/tests/regressiontests/test_client_regress/views.py
+++ b/tests/regressiontests/test_client_regress/views.py
@@ -1,6 +1,7 @@
 from django.contrib.auth.decorators import login_required
 from django.http import HttpResponse, HttpResponseRedirect
 from django.core.exceptions import SuspiciousOperation
+from django.shortcuts import render_to_response
 
 def no_template_view(request):
     "A simple view that expects a GET request, and returns a rendered template"
@@ -43,3 +44,6 @@ def set_session_view(request):
 def check_session_view(request):
     "A view that reads a session variable"
     return HttpResponse(request.session.get('session_var', 'NO'))
+
+def return_unicode(request):
+    return render_to_response('unicode.html')