--- a/duplicity/backends/pcabackend.py
+++ b/duplicity/backends/pcabackend.py
@@ -150,8 +150,8 @@ Exception: %s""" % str(e))
                 return log.ErrorCode.backend_not_found
 
     def _put(self, source_path, remote_filename):
-        self.conn.put_object(self.container, self.prefix + remote_filename,
-                             open(source_path.name))
+        self.conn.put_object(self.container, self.prefix + util.fsdecode(remote_filename),
+                             open(util.fsdecode(source_path.name)))
 
     def _get(self, remote_filename, local_path):
         body = self.preprocess_download(remote_filename, 60)
@@ -166,10 +166,10 @@ Exception: %s""" % str(e))
         return [o[u'name'][len(self.prefix):] for o in objs]
 
     def _delete(self, filename):
-        self.conn.delete_object(self.container, self.prefix + filename)
+        self.conn.delete_object(self.container, self.prefix + util.fsdecode(filename))
 
     def _query(self, filename):
-        sobject = self.conn.head_object(self.container, self.prefix + filename)
+        sobject = self.conn.head_object(self.container, self.prefix + util.fsdecode(filename))
         return {u'size': int(sobject[u'content-length'])}
 
     def preprocess_download(self, remote_filename, retry_period, wait=True):
@@ -188,7 +188,7 @@ Exception: %s""" % str(e))
 
     def unseal(self, remote_filename):
         try:
-            _, body = self.conn.get_object(self.container, self.prefix + remote_filename,
+            _, body = self.conn.get_object(self.container, self.prefix + util.fsdecode(remote_filename),
                                            resp_chunk_size=1024)
             log.Info(u"File %s was successfully unsealed." % remote_filename)
             return body
