public function recursiveFromUtf8($subject, $destinationEncoding = 'ISO-8859-15', $force = false, $useIconv = false)
    {
        if (is_array($subject)) {
            /** @var array $subject */
            foreach ($subject as $key => $value) {
                $subject[$key] = $this->recursiveFromUtf8($value, $destinationEncoding, $force, $useIconv);
            }

            return $subject;
        } elseif (is_object($subject)) {
            /** @var \stdClass $subject */
            $objectVars = get_object_vars($subject);
            foreach ($objectVars as $property => $value) {
                $subject->{$property} = $this->recursiveFromUtf8($value, $destinationEncoding, $force, $useIconv);
            }

            return $subject;
        } elseif (is_string($subject)) {
            /** @var string $subject */
            return $this->stringFromUtf8($subject, $destinationEncoding, $force, $useIconv);
        }

        return $subject;
    }