Fix encoding and unicode_errors (#277)

Previously, unicode_errors was either set to NULL or to
the result of PyBytes_AsString. This restores that behavior while also
keeping the existing NULL default behavior.
Original defaults were restored to keep API compatibility until these
deprecated options are finally removed.
This commit is contained in:
Andrew Rabert 2018-02-02 20:34:42 -05:00 committed by INADA Naoki
parent 52fb85a2c5
commit a0ba076c35

View file

@ -127,27 +127,26 @@ cdef class Packer(object):
if not PyCallable_Check(default):
raise TypeError("default must be a callable.")
self._default = default
if encoding is None:
if unicode_errors is None:
self.encoding = NULL
self.unicode_errors = NULL
else:
self.encoding = "utf_8"
self.unicode_errors = unicode_errors
if encoding is None and unicode_errors is None:
self.encoding = NULL
self.unicode_errors = NULL
else:
if isinstance(encoding, unicode):
self._bencoding = encoding.encode('ascii')
if encoding is None:
self.encoding = 'utf-8'
else:
self._bencoding = encoding
self.encoding = PyBytes_AsString(self._bencoding)
if isinstance(unicode_errors, unicode):
self._berrors = unicode_errors.encode('ascii')
if isinstance(encoding, unicode):
self._bencoding = encoding.encode('ascii')
else:
self._bencoding = encoding
self.encoding = PyBytes_AsString(self._bencoding)
if unicode_errors is None:
self.unicode_errors = 'strict'
else:
self._berrors = unicode_errors
if self._berrors is not None:
if isinstance(unicode_errors, unicode):
self._berrors = unicode_errors.encode('ascii')
else:
self._berrors = unicode_errors
self.unicode_errors = PyBytes_AsString(self._berrors)
else:
self.unicode_errors = NULL
def __dealloc__(self):
PyMem_Free(self.pk.buf)