diff --git a/swift/common/direct_client.py b/swift/common/direct_client.py
index 0043e66707..71b3d0799b 100644
--- a/swift/common/direct_client.py
+++ b/swift/common/direct_client.py
@@ -42,6 +42,8 @@ class DirectClientException(ClientException):
         # host can be used to override the node ip and port reported in
         # the exception
         host = host if host is not None else node
+        if not isinstance(path, six.text_type):
+            path = path.decode("utf-8")
         full_path = quote('/%s/%s%s' % (node['device'], part, path))
         msg = '%s server %s:%s direct %s %r gave status %s' % (
             stype, host['ip'], host['port'], method, full_path, resp.status)
diff --git a/test/unit/common/test_direct_client.py b/test/unit/common/test_direct_client.py
index cc39d73f92..7a1197a23a 100644
--- a/test/unit/common/test_direct_client.py
+++ b/test/unit/common/test_direct_client.py
@@ -99,8 +99,9 @@ def mocked_http_conn(*args, **kwargs):
 class TestDirectClient(unittest.TestCase):
 
     def setUp(self):
-        self.node = {'ip': '1.2.3.4', 'port': '6200', 'device': 'sda',
-                     'replication_ip': '1.2.3.5', 'replication_port': '7000'}
+        self.node = json.loads(json.dumps({  # json roundtrip to ring-like
+            'ip': '1.2.3.4', 'port': '6200', 'device': 'sda',
+            'replication_ip': '1.2.3.5', 'replication_port': '7000'}))
         self.part = '0'
 
         self.account = u'\u062a account'
@@ -837,7 +838,8 @@ class TestDirectClient(unittest.TestCase):
         self.assertEqual(err_ctx.exception.http_status, 500)
         self.assertIn('DELETE', err_ctx.exception.message)
         self.assertIn(quote('/%s/%s/%s/%s/%s'
-                            % (self.node['device'], self.part, self.account,
+                            % (self.node['device'].encode('utf-8'),
+                               self.part, self.account,
                                self.container, self.obj)),
                       err_ctx.exception.message)
         self.assertIn(self.node['ip'], err_ctx.exception.message)
@@ -872,5 +874,14 @@ class TestDirectClient(unittest.TestCase):
         for line in error_lines:
             self.assertIn('Kaboom!', line)
 
+
+class TestUTF8DirectClient(TestDirectClient):
+
+    def setUp(self):
+        super(TestUTF8DirectClient, self).setUp()
+        self.account = self.account.encode('utf-8')
+        self.container = self.container.encode('utf-8')
+        self.obj = self.obj.encode('utf-8')
+
 if __name__ == '__main__':
     unittest.main()