Je dois pouvoir xml
téléchargement de fichiers avec ISO-8859-1
(Je sais, que UTF-8
est bien meilleur, mais notre partenaire a des exigences strictes en matière d'encodage et nous ne pouvons pas le forcer à changer sa politique).
Fond du serveur :
- Google Chrome 71.0.3578.98 (version officielle) (64 bits)
- Ubuntu 16.04
- nginx
- php 7.2
- Symfony 4.0.15
Le contrôleur renvoie une réponse avec le bon jeu de caractères :
return (new Response($xml->content(), Response::HTTP_CREATED, ['Content-Type' => $xml->contentType()]))
->setCharset($xml->charset());
Il semble parfaitement correct (au moins dans Chrome DevTools il y a un en-tête de réponse correct) :
Mais le problème est que le fichier stocké dans le système de fichiers avec UTF-8
l'encodage.
$ file --mime test.xml
test.xml: application/xml; charset=utf-8
et le fichier XML a un rendu incorrect après son ouverture dans le navigateur :
<INSIGMA>
<AktuarMed>
<Person>
<Name>Hans Müller</Name>
<Surname>Müller</Surname>
<Forename>Hans</Forename>
</Person>
</AktuarMed>
</INSIGMA>
Le nom de famille doit être Müller mais il s'affiche mal. Si je change l'encodage de ce fichier pour celui attendu, alors il s'affiche correctement :
$ iconv -f UTF-8 test.xml -t ISO-8859-1 > test.xml
$ file --mime test.xml
test.xml: application/xml; charset=iso-8859-1
TL;DR : Donc la question est
Pourquoi ce fichier est stocké avec utf-8
si le serveur répond, cela signifie que ISO-8859-1
doit être utilisé ?
- Est-ce que je dois envoyer des en-têtes supplémentaires pour forcer le téléchargement du fichier avec
ISO-8859-1
charset ? ou - S'agit-il du comportement par défaut du navigateur ? ou
- Est-ce un comportement par défaut du système d'exploitation ?
Comment attraper ce problème et à quelle étape dois-je trouver une solution ?