diff -r a318a5ab91fe Lib/http/server.py --- a/Lib/http/server.py Sat Aug 16 15:44:02 2014 +0200 +++ b/Lib/http/server.py Sat Aug 16 22:23:25 2014 +0300 @@ -747,7 +747,12 @@ return None list.sort(key=lambda a: a.lower()) r = [] - displaypath = html.escape(urllib.parse.unquote(self.path)) + try: + displaypath = urllib.parse.unquote(self.path, + errors='surrogatepass') + except UnicodeDecodeError: + displaypath = urllib.parse.unquote(path) + displaypath = html.escape(displaypath) enc = sys.getfilesystemencoding() title = 'Directory listing for %s' % displaypath r.append('%s' - % (urllib.parse.quote(linkname), html.escape(displayname))) + % (urllib.parse.quote(linkname, + errors='surrogatepass'), + html.escape(displayname))) r.append('\n