@@ -428,10 +428,23 @@ Client.prototype.deleteFile = function(filename, headers, fn){
 };
 
 function xmlEscape(string) {
-    return string.replace(/&/g, "&amp;")
-                 .replace(/</g, "&lt;")
-                 .replace(/>/g, "&gt;")
-                 .replace(/"/g, "&quot;");
+  return string
+    .split("")
+    .map(function (char) {
+      if (char === "&") return "&amp;";
+      if (char === "<") return "&lt;";
+      if (char === ">") return "&gt;";
+      if (char === '"') return "&quot;";
+
+      // Although we only need to replace the above characters to have valid xml,
+      // the S3 api call will fail if we don't escape non ascii characters such as é.
+      if (char.charCodeAt(0) < 128) {
+        return char;
+      } else {
+        return '&#' + char.charCodeAt(0) + ';';
+      }
+    })
+    .join("");
 }
 
 function makeDeleteXmlString(keys) {