0
votes

JavaScript Fetch: caractères avec des problèmes d'encodage

J'essaie d'utiliser Fetch pour importer des données à l'écran, mais certains des caractères affichent un étrange signe � qui, je crois, a quelque chose à voir avec la conversion de caractères spéciaux.

Lors du débogage sur le côté serveur ou si j'appelle le servlet sur mon navigateur, le problème ne se produit pas, donc je pense que le problème vient de mon JavaScript. Consultez le code ci-dessous:

var myHeaders = new Headers();
myHeaders.append('Content-Type','text/plain; charset=UTF-8');

fetch('getrastreiojadlog?cod=10082551688295', myHeaders)
        .then(function (response) {
            return response.text();
        })
        .then(function (resp) {
            console.log(resp);
        });

Je pense que c'est probablement un détail, mais je n'ai pas réussi à découvrir ce qui se passe. Donc, tous les conseils sont les bienvenus Thx


1 commentaires

regardez là .. et autres github.com/polygonplanet/encoding.js


3 Réponses :


0
votes

Peut-être que votre serveur ne renvoie pas de réponse encodée en utf-8, essayez de trouver le jeu de caractères utilisé, puis modifiez-le dans les en-têtes d'appel. Peut-être ISO-8859-1:

myHeaders.append('Content-Type','text/plain; charset=ISO-8859-1');


5 commentaires

Salut Nil, Thx pour la réponse. Je l'exécute localement sur ma machine et le fichier POM est défini avec UTF-8 . Cela signifie donc qu'il devrait fonctionner avec UTF, n'est-ce pas?


POM déposer? C'est le back-end java / maven, n'est-ce pas? Je ne suis pas familier avec ces environnements mais je suis à peu près sûr qu'ils utilisent ISO-8859-1 comme encodage par défaut. Le project.build.Source ressemble plus à l'encodage d'entrée (source), et je ne sais pas comment gérer l'encodage de sortie pour votre backend. Mais peut-être que vous pouvez essayer le lien TextDecoder Class in javascript:


Oui, vous avez raison sur les deux déclarations. C'est pourquoi nous devons dire explicitement que c'est utf-8. Étant donné que cela ne se produit pas en ouvrant l'URL dans le navigateur et que cela se produit lors de l'utilisation de fetch (), cela pourrait-il être quelque chose sur l'en-tête de récupération ou quelque chose comme ça?


avez-vous essayé " UTF-8 " dans votre POM?


Je viens de le faire, malheureusement ça n'a pas marché ... Dommage, j'avais beaucoup d'espoir avec celui-là



0
votes

En fait, le problème était de savoir comment le servlet servait les données sans informer explicitement le type encondant sur la réponse. En ajoutant la ligne suivante dans le servlet Java:

response.setContentType("text/html;charset=UTF-8");

il était possible d'obtenir les caractères dans le bon format.


0 commentaires

0
votes

La fonction response's text () est toujours décode la charge utile comme utf-8.

Si vous voulez le texte dans un autre jeu de caractères, vous pouvez utiliser TextDecoder pour convertir le tampon de réponse (PAS le texte) dans un texte décodé avec le jeu de caractères choisi.

En utilisant votre exemple, il devrait être:

var myHeaders = new Headers();
myHeaders.append('Content-Type','text/plain; charset=UTF-8');

fetch('getrastreiojadlog?cod=10082551688295', myHeaders)
        .then(function (response) {
            return response.arrayBuffer();
        })
        .then(function (buffer) {
            const decoder = new TextDecoder('iso-8859-1');
            const text = decoder.decode(buffer);
            console.log(text);
        });

Notez que J'utilise iso-8859-1 comme décodeur.

Crédits: Blog Schneide


0 commentaires