Index: Lib/test/test_mimetypes.py =================================================================== --- Lib/test/test_mimetypes.py (revision 76306) +++ Lib/test/test_mimetypes.py (revision ) @@ -69,8 +69,6 @@ # ensure all entries actually come from the Windows registry self.original_types_map = mimetypes.types_map.copy() mimetypes.types_map.clear() - mimetypes.init() - self.db = mimetypes.MimeTypes() def tearDown(self): # restore default settings @@ -81,9 +79,28 @@ # the original, minimum contents of the MIME database in the # Windows registry is undocumented AFAIK. # Use file types that should *always* exist: + mimetypes.init() + db = mimetypes.MimeTypes() eq = self.assertEqual - eq(self.db.guess_type("foo.txt"), ("text/plain", None)) + eq(db.guess_type("foo.txt"), ("text/plain", None)) + def test_non_latin(self): + import _winreg + + class MockWinreg(object): + def __getattr__(self, name): + if name == 'EnumKey': + return lambda key, i: _winreg.EnumKey(key, i) + chr(0xe0) + return getattr(_winreg, name) + + mimetypes._winreg = MockWinreg() + try: + # this used to throw an exception if registry contained non-Latin + # characters in mime types (issue #9291) + mimetypes.init() + finally: + mimetypes._winreg = _winreg + def test_main(): test_support.run_unittest(MimeTypesTestCase, Win32MimeTypesTestCase Index: Lib/mimetypes.py =================================================================== --- Lib/mimetypes.py (revision 78037) +++ Lib/mimetypes.py (revision ) @@ -248,7 +248,7 @@ break try: ctype = ctype.encode(default_encoding) # omit in 3.x! - except UnicodeEncodeError: + except UnicodeError: pass else: yield ctype