Problemas de codificação com XMLWriter (PHP)

Tome este código PHP simples:

<code>$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');

$xmlWriter->writeElement('test', $data);

$xmlWriter->endDocument();
$xmlWriter->flush();
</code>

A classe XMLWriter possui um ótimo recurso: ela converte todos os dados que você fornecer para a codificação de saída. Por exemplo, aqui vai converter$data para UTF-8 porque passei'utf-8' nostartDocument função.

O problema é que, no meu caso, o conteúdo de$data vem de um banco de dados cujo formato de saída é UTF-8 eé, portanto, já em UTF-8. O XMLWriterprovavelmente acha que os dados estão em ISO-8859-1 e converte-os novamente para UTF-8, e eu obtenho símbolos estranhos onde eu deveria receber sotaques.

Atualmente estou usandoutf8_decode em torno de cada string proveniente do banco de dados, o que significa que estou convertendo de UTF-8 para ISO-8859-1 e, em seguida, o XMLWriter o transforma em UTF-8.

Isso funciona, mas não está limpo:

<code>$xmlWriter->writeElement('test', utf8_decode($data));
</code>

Existe uma solução mais limpa?

EDITAR: mostrando um exemplo completo

<code>$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');
$xmlWriter->startElement('usersList');

$database = new PDO('mysql:host=localhost;dbname=xxxxx', 'xxxxx', 'xxxxx');
$database->exec('SET CHARACTER SET UTF8');
$database->exec('SET NAMES UTF8');
foreach ($database->query('SELECT name FROM usersList') as $user)
   $xmlWriter->writeElement('user', $user[0]);   // if the user's name is 'hervé' in the database, it will print 'hervé' instead

$xmlWriter->endElement();
$xmlWriter->endDocument();
$xmlWriter->flush();
</code>

questionAnswers(1)

yourAnswerToTheQuestion