'Read up to ``size`` bytes from the underlying stream, decode
them using this reader\'s encoding, and return the resulting
unicode string.  ``linebuffer`` is not included in the result.'

def _read(self, size=None):

    if (size == 0):
        return u''
    if (self._bom and (self.stream.tell() == 0)):
        self.stream.read(self._bom)
    if (size is None):
        new_bytes = self.stream.read()
    else:
        new_bytes = self.stream.read(size)
    bytes = (self.bytebuffer + new_bytes)
    (chars, bytes_decoded) = self._incr_decode(bytes)
    if ((size is not None) and (not chars) and (len(new_bytes) > 0)):
        while (not chars):
            new_bytes = self.stream.read(1)
            if (not new_bytes):
                break
            bytes += new_bytes
            (chars, bytes_decoded) = self._incr_decode(bytes)
    self.bytebuffer = bytes[bytes_decoded:]
    return chars
