mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-36778: cp65001 encoding becomes an alias to utf_8 (GH-13230)
This commit is contained in:
parent
137be34180
commit
d267ac20c3
5 changed files with 4 additions and 134 deletions
|
@ -875,95 +875,6 @@ class UTF8Test(ReadTest, unittest.TestCase):
|
|||
b"abc\xed\xa0z".decode(self.encoding, "surrogatepass")
|
||||
|
||||
|
||||
@unittest.skipUnless(sys.platform == 'win32',
|
||||
'cp65001 is a Windows-only codec')
|
||||
class CP65001Test(ReadTest, unittest.TestCase):
|
||||
encoding = "cp65001"
|
||||
|
||||
def test_encode(self):
|
||||
tests = [
|
||||
('abc', 'strict', b'abc'),
|
||||
('\xe9\u20ac', 'strict', b'\xc3\xa9\xe2\x82\xac'),
|
||||
('\U0010ffff', 'strict', b'\xf4\x8f\xbf\xbf'),
|
||||
('\udc80', 'strict', None),
|
||||
('\udc80', 'ignore', b''),
|
||||
('\udc80', 'replace', b'?'),
|
||||
('\udc80', 'backslashreplace', b'\\udc80'),
|
||||
('\udc80', 'namereplace', b'\\udc80'),
|
||||
('\udc80', 'surrogatepass', b'\xed\xb2\x80'),
|
||||
]
|
||||
for text, errors, expected in tests:
|
||||
if expected is not None:
|
||||
try:
|
||||
encoded = text.encode('cp65001', errors)
|
||||
except UnicodeEncodeError as err:
|
||||
self.fail('Unable to encode %a to cp65001 with '
|
||||
'errors=%r: %s' % (text, errors, err))
|
||||
self.assertEqual(encoded, expected,
|
||||
'%a.encode("cp65001", %r)=%a != %a'
|
||||
% (text, errors, encoded, expected))
|
||||
else:
|
||||
self.assertRaises(UnicodeEncodeError,
|
||||
text.encode, "cp65001", errors)
|
||||
|
||||
def test_decode(self):
|
||||
tests = [
|
||||
(b'abc', 'strict', 'abc'),
|
||||
(b'\xc3\xa9\xe2\x82\xac', 'strict', '\xe9\u20ac'),
|
||||
(b'\xf4\x8f\xbf\xbf', 'strict', '\U0010ffff'),
|
||||
(b'\xef\xbf\xbd', 'strict', '\ufffd'),
|
||||
(b'[\xc3\xa9]', 'strict', '[\xe9]'),
|
||||
# invalid bytes
|
||||
(b'[\xff]', 'strict', None),
|
||||
(b'[\xff]', 'ignore', '[]'),
|
||||
(b'[\xff]', 'replace', '[\ufffd]'),
|
||||
(b'[\xff]', 'surrogateescape', '[\udcff]'),
|
||||
(b'[\xed\xb2\x80]', 'strict', None),
|
||||
(b'[\xed\xb2\x80]', 'ignore', '[]'),
|
||||
(b'[\xed\xb2\x80]', 'replace', '[\ufffd\ufffd\ufffd]'),
|
||||
]
|
||||
for raw, errors, expected in tests:
|
||||
if expected is not None:
|
||||
try:
|
||||
decoded = raw.decode('cp65001', errors)
|
||||
except UnicodeDecodeError as err:
|
||||
self.fail('Unable to decode %a from cp65001 with '
|
||||
'errors=%r: %s' % (raw, errors, err))
|
||||
self.assertEqual(decoded, expected,
|
||||
'%a.decode("cp65001", %r)=%a != %a'
|
||||
% (raw, errors, decoded, expected))
|
||||
else:
|
||||
self.assertRaises(UnicodeDecodeError,
|
||||
raw.decode, 'cp65001', errors)
|
||||
|
||||
def test_lone_surrogates(self):
|
||||
self.assertRaises(UnicodeEncodeError, "\ud800".encode, "cp65001")
|
||||
self.assertRaises(UnicodeDecodeError, b"\xed\xa0\x80".decode, "cp65001")
|
||||
self.assertEqual("[\uDC80]".encode("cp65001", "backslashreplace"),
|
||||
b'[\\udc80]')
|
||||
self.assertEqual("[\uDC80]".encode("cp65001", "namereplace"),
|
||||
b'[\\udc80]')
|
||||
self.assertEqual("[\uDC80]".encode("cp65001", "xmlcharrefreplace"),
|
||||
b'[�]')
|
||||
self.assertEqual("[\uDC80]".encode("cp65001", "surrogateescape"),
|
||||
b'[\x80]')
|
||||
self.assertEqual("[\uDC80]".encode("cp65001", "ignore"),
|
||||
b'[]')
|
||||
self.assertEqual("[\uDC80]".encode("cp65001", "replace"),
|
||||
b'[?]')
|
||||
|
||||
def test_surrogatepass_handler(self):
|
||||
self.assertEqual("abc\ud800def".encode("cp65001", "surrogatepass"),
|
||||
b"abc\xed\xa0\x80def")
|
||||
self.assertEqual(b"abc\xed\xa0\x80def".decode("cp65001", "surrogatepass"),
|
||||
"abc\ud800def")
|
||||
self.assertEqual("\U00010fff\uD800".encode("cp65001", "surrogatepass"),
|
||||
b"\xf0\x90\xbf\xbf\xed\xa0\x80")
|
||||
self.assertEqual(b"\xf0\x90\xbf\xbf\xed\xa0\x80".decode("cp65001", "surrogatepass"),
|
||||
"\U00010fff\uD800")
|
||||
self.assertTrue(codecs.lookup_error("surrogatepass"))
|
||||
|
||||
|
||||
class UTF7Test(ReadTest, unittest.TestCase):
|
||||
encoding = "utf-7"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue