diff options
author | tailhook <pc@gafol.net> | 2011-08-22 01:52:45 +0900 |
---|---|---|
committer | INADA Naoki <songofacandy@gmail.com> | 2011-08-22 01:52:45 +0900 |
commit | 8c3c8a250b5f6f129e5e077a224ec6916cc87437 (patch) | |
tree | 31059bfc338c441bbe09fb23747b39137894a3fb /msgpack/_msgpack.pyx | |
parent | 4a1ce19addc6fc5faf26101b16124401113889d1 (diff) | |
download | msgpack-python-8c3c8a250b5f6f129e5e077a224ec6916cc87437.tar.gz |
Fixed `encoding` argument for unpacker in Python
Diffstat (limited to 'msgpack/_msgpack.pyx')
-rw-r--r-- | msgpack/_msgpack.pyx | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/msgpack/_msgpack.pyx b/msgpack/_msgpack.pyx index 443cbd7..5a83ea0 100644 --- a/msgpack/_msgpack.pyx +++ b/msgpack/_msgpack.pyx @@ -203,6 +203,7 @@ def unpackb(object packed, object object_hook=None, object list_hook=None, bint if encoding is None: enc = NULL + err = NULL else: if isinstance(encoding, unicode): bencoding = encoding.encode('ascii') @@ -267,6 +268,10 @@ cdef class Unpacker(object): cdef Py_ssize_t read_size cdef bint use_list cdef object object_hook + cdef object _bencoding + cdef object _berrors + cdef char *encoding + cdef char *unicode_errors def __cinit__(self): self.buf = NULL @@ -276,7 +281,8 @@ cdef class Unpacker(object): self.buf = NULL; def __init__(self, file_like=None, Py_ssize_t read_size=0, bint use_list=0, - object object_hook=None, object list_hook=None, encoding=None, unicode_errors=None): + object object_hook=None, object list_hook=None, + encoding=None, unicode_errors='strict'): if read_size == 0: read_size = 1024*1024 self.use_list = use_list @@ -303,6 +309,20 @@ cdef class Unpacker(object): if not PyCallable_Check(list_hook): raise TypeError("list_hook must be a callable.") self.ctx.user.list_hook = <PyObject*>list_hook + if encoding is None: + self.ctx.user.encoding = NULL + self.ctx.user.unicode_errors = NULL + else: + if isinstance(encoding, unicode): + self._bencoding = encoding.encode('ascii') + else: + self._bencoding = encoding + self.ctx.user.encoding = PyBytes_AsString(self._bencoding) + if isinstance(unicode_errors, unicode): + self._berrors = unicode_errors.encode('ascii') + else: + self._berrors = unicode_errors + self.ctx.user.unicode_errors = PyBytes_AsString(self._berrors) def feed(self, object next_bytes): cdef char* buf |