NodeJS convertit la chaîne en UTF-8
À partir de ma base de données, j'obtiens la chaîne suivante:
Johan Öbert
Ce qu'il devrait dire est:
Johan Öbert
J'ai essayé de le convertir en utf-8 comme ceci:
nameString.toString("utf8");
Mais toujours le même problème.
Des idées?
5 réponses
Utilisez le module utf8 de npm pour encoder / décoder la chaîne.
Installation:
npm install utf8
Dans un navigateur:
<script src="utf8.js"></script>
Dans Le Noeud.js:
const utf8 = require('utf8');
API:
Encoder:
utf8.encode(string)
Code une chaîne JavaScript donnée (string) en UTF-8 et renvoie la version codée en UTF-8 de la chaîne. Il génère une erreur si la chaîne d'entrée contient une valeur non scalaire, c'est-à-dire un substitut Solitaire. (Si vous devez également encoder des valeurs non scalaires, utilisez WTF-8 plutôt.)
// U+00A9 COPYRIGHT SIGN; see http://codepoints.net/U+00A9
utf8.encode('\xA9');
// → '\xC2\xA9'
// U+10001 LINEAR B SYLLABLE B038 E; see http://codepoints.net/U+10001
utf8.encode('\uD800\uDC01');
// → '\xF0\x90\x80\x81'
Décoder:
utf8.decode(byteString)
Décode toute chaîne codée en UTF-8 (byteString) en UTF-8 et renvoie la version décodée en UTF-8 de la chaîne. Il génère une erreur lorsque l'UTF-8 mal formé est détecté. (Si vous devez également décoder des valeurs non scalaires codées, utilisez WTF-8 à la place.)
utf8.decode('\xC2\xA9');
// → '\xA9'
utf8.decode('\xF0\x90\x80\x81');
// → '\uD800\uDC01'
// → U+10001 LINEAR B SYLLABLE B038 E
J'ai eu le même problème, quand j'ai chargé un fichier texte via fs.readFile()
, j'ai essayé de définir L'encodage en UTF8, il a gardé la même chose. ma solution est maintenant la suivante:
myString = JSON.parse( JSON.stringify( myString ) )
Après cela, un Ö est vraiment interprété comme un Ö.
Lorsque vous voulez changer l'encodage, vous passez toujours de l'un à l'autre. Donc, vous pouvez aller à partir de Mac Roman
à UTF-8
ou de ASCII
à UTF-8
.
Il est aussi important de connaître le codage de sortie souhaité que le codage source actuel. Par exemple, si vous avez Mac Roman
et que vous le décodez de UTF-16
à UTF-8
, vous le ferez simplement brouillé.
Si vous voulez en savoir plus sur l'encodage, cet article va dans beaucoup de détails:
Le npm pacakge encoding qui utilise node-iconv ou iconv-Lite devrait vous permettre de spécifier facilement quel codage source et sortie vous voulez:
var resultBuffer = encoding.convert(nameString, 'ASCII', 'UTF-8');
J'ai eu le même problème avec json, utilisez simplement ceci:
JSON.parse(json or object)
var utf8 = require("./utf8")
console.log(utf8.encode("NEAR DAGDI CHAWL"))
//utf8.js is working properly