http.obtenir et ISO-8859-1 réponses codées
Je suis en train d'écrire un flux RSS de l'outil de récupération et collé avec certains problèmes de charset.
Le chargement et l'analyse de l'alimentation a été assez facile par rapport à l'encodage.
Je suis le chargement de la nourrir avec des http.get
et je suis en train de mettre les morceaux ensemble sur toutes les données de l'événement.
Plus tard, je suis à l'analyse de l'ensemble de la chaîne avec le mnp-lib feedparser
qui fonctionne très bien avec la chaîne donnée.
Malheureusement, je suis habitué à des fonctions comme utf8_encode()
en php et je suis en manque dans node.js donc je suis coincé avec l'aide de Iconv qui n'est actuellement pas à faire ce que je veux.
Sans codage il y a plusieurs utf8 ?-icônes pour le mauvais jeu de caractères, avec iconv, la chaîne est analysée de mal :/
Actuellement, je suis codage de chaque chaîne seperatedly:
//var encoding ≈ ISO-8859-1 etc. (Is the right one, checked with docs etc.)
//Shortend version
var iconv = new Iconv(encoding, 'UTF-8');
parser.on('article', function(article){
var object = {
title : iconv.convert(article.title).toString('UTF-8'),
description : iconv.convert(article.summary).toString('UTF-8')
}
Articles.push(object);
});
Dois-je commencer l'encodage avec les données de la mémoire tampon ou plus tard, avec l'intégralité de la chaîne?
Merci!
PS: l'Encodage est déterminée par l'analyse de la tête de xml
Comment sur un module qui permet l'encodage en node.js plus facile?
Je ne peux pas obtenir iconv encodage droit
Donc, l'article objets ne sont pas codés correctement et, au lieu de contenir les ordures? Et pourriez-vous montrer le nourrir?
yepp, le script fonctionne très bien, mais le encodet caractères (ü,ö,ä, etc.) sont mauvais
Pourriez-vous nous donner la sortie de la console.log(nouveau Tampon(article.titre)); " pour l'un des titres qui est en cours de codage de mal?
OriginalL'auteur moe | 2012-01-18
Vous devez vous connecter pour publier un commentaire.
Vous êtes probablement frapper le même problème décrit sur https://groups.google.com/group/nodejs/browse_thread/thread/b2603afa31aada9c.
La solution semble être de définir le temps de réponse codage binaire avant de traitement de la mémoire Tampon avec Iconv.
Pertinentes bits est
Mis à jour: cela a été ma première réaction
Sont vous assurer que l'aliment que vous recevez a été encodée correctement?
Je vois deux erreurs possibles:
Content-Type
que les étatscharset=UTF-8
.Content-Type
en-tête n'est pas en état de quoi que ce soit, par défaut ASCII.Vous devriez vérifier le contenu de votre alimentation et de l'envoi des en-têtes avec un utilitaire comme Wireshark ou cURL.
Je suis assez sûr que le contenu est ISO-8859-1 codé. Contenu de l'en-Tête et de l'en-tête du fichier xml de match.
En effet, il semble codé correctement. J'ai mis à jour ma réponse à proposer une autre solution.
Wow, ça fonctionne! Mais j'ai une question à propos de la mémoire tampon. Le tampon a besoin d'une taille, est actuellement fixé à 10 mo (comme dans votre lien), dois-je le laisser comme ça, ou est-il un meilleur moyen de la manipulation de la taille de la mémoire tampon?
Les tampons sont des bêtes étranges. Suffit d'utiliser les valeurs par défaut, ils ne seront pas perdre la mémoire, ne vous inquiétez pas. Si vous voulez réduire sa taille, vous pouvez le faire, mais rappelez-vous que les tampons ne peut être augmenté en taille, donc, quelle que soit la taille que vous choisissez, assurez-vous qu'il fit tout son possible le flux RSS que vous recevrez.
OriginalL'auteur gioele
Je pense que le problème est probablement avec la manière de stocker les données avant de les passer à feedparser. Il est difficile de dire sans voir vos données gestionnaire d'événements, mais je suppose que vous faites quelque chose comme ceci:
Est ce que le droit?
Le problème est que dans ce cas, le gros morceau est un tampon, et par l'utilisation de '+' pour ajouter tous ensemble, vous convertir implicitement le tampon à une chaîne.
À la recherche plus loin, vous devriez vraiment faire la fonction iconv de conversion sur l'ensemble de l'alimentation, avant de l'exécuter à travers feedparser, parce que feedparser est probablement pas au courant d'autres encodages.
Essayer quelque chose comme cela:
OriginalL'auteur loganfsmyth