D'étranges caractères unicode lors de la lecture du fichier en node.js app
J'essaie d'écrire un nœud application qui lit dans un ensemble de fichiers, les divise en lignes, et place les lignes dans un tableau. Assez simple. Il fonctionne sur pas mal de fichiers à l'exception de certains fichiers SQL que je suis en train de travailler avec. Pour une raison que je semble être obtenir une sorte de l'unicode de sortie lorsque j'ai divisé les lignes vers le haut. L'application ressemble à quelque chose comme ceci:
fs = require("fs");
var data = fs.readFileSync("test.sql", "utf8");
console.log(data);
lines = data.split("\n");
console.log(lines);
Le fichier d'entrée ressemble à quelque chose comme ceci:
use whatever
go
La sortie ressemble à ceci:
��use whatever
go
[ '��u\u0000s\u0000e\u0000 \u0000w\u0000h\u0000a\u0000t\u0000e\u0000v\u0000e\u0000r\u0000',
'\u0000g\u0000o\u0000',
'\u0000' ]
Comme vous pouvez le voir il y a une sorte de non reconnue personnage au début du fichier. Après la lecture des données dans et directement de la sortie, il semble ok, sauf pour ce personnage. Cependant, si je puis tenter de les diviser en lignes, je reçois toutes ces unicode comme les personnages. En gros, c'est tous les caractères avec "\u0000" au début de chacun d'eux.
J'ai aucune idée de ce qui se passe ici, mais il semble avoir quelque chose à voir avec les caractères dans le fichier lui-même. Si je l'ai copier et coller le texte du fichier dans un autre nouveau fichier et exécutez l'application sur le nouveau fichier, il fonctionne très bien. Je suppose que tout ce qui est à l'origine de ce problème est en train d'être supprimés au cours de la copie et de la pâte.
Vous devez vous connecter pour publier un commentaire.
Votre fichier est en UTF-16 Peu de
Big- Boutiste, pas en UTF-8.Malheureusement node.js prend uniquement en charge UTF-16 Little Endian ou UTF-16LE (ne Peut pas être sûr de lire des docs, il y a une légère différence entre eux; à savoir que l'UTF-16LE ne pas utiliser les Nomenclatures), de sorte que vous avez à utiliser iconv ou à convertir le fichier en UTF-8 d'une autre façon.
Exemple:
u
après la nomenclature :X fixEst-ce peut-être le
BOM
(Octet de Commande d'interrogation)? Assurez-vous de sauvegarder vos fichiers sans laBOM
ou inclure le code à la bandeBOM
.La
BOM
est habituellement invisible dans les éditeurs de texte.Je sais que Notepad++ dispose d'une fonction où vous pouvez facilement enlever un
BOM
à partir d'un fichier.Encoding > Encode in UTF-8 without BOM
.Utiliser la version lite de Iconv-lite
J'ai fait les opérations suivantes dans l'invite de commandes Windows pour convertir l'endianness: