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?

21
demandé sur Alosyius 2013-11-24 16:08:02

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

Ressources

22
répondu Jayram Singh 2018-06-15 05:41:10

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 Ö.

10
répondu Tobias Nickel 2016-03-01 17:46:05

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:

Ce Que Chaque Programmeur Doit Absolument, Positivement Connaître Les Encodages Et Les Jeux De Caractères Pour Travailler Avec Text

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');
5
répondu paaat 2015-02-07 09:26:03

J'ai eu le même problème avec json, utilisez simplement ceci:

JSON.parse(json or object)
0
répondu Mohammad Rajabloo 2018-05-20 18:32:05
var utf8 = require("./utf8")

console.log(utf8.encode("NEAR DAGDI CHAWL"))

//utf8.js is working properly
-8
répondu Aravind Shankar 2018-09-09 21:59:57