Traitement du codage cyrillique dans Node.Js / Express App

Dans mon application, un utilisateur envoie du texte via la zone de texte d’un formulaire. Ce texte est ensuite transmis à l’application, puis traité par la bibliothèque jsesc , qui échappe aux chaînes javascript.

Le problème est que lorsque je tape un texte en russe, tel que

нам #интересны наши #идеи 

ce que je reçois c’est

  '\u043D\u0430\u043C #\u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u044B \u043D\u0430\u0448\u0438 #\u0438\u0434\u0435\u0438' 

J’ai ensuite besoin de transmettre ces données via FlowDock pour extraire les hashtags et FlockDock ne les reconnaît tout simplement pas.

Quelqu’un peut-il me dire s’il vous plaît

1) Quelle est la nécessité de la convertir en cette représentation?

2) S’il est logique de le reconvertir en codage cyrillique pour FlowDock et pour la firebase database, ou dois-je le conserver en Unicode et essayer de faire en sorte que FlowDock fonctionne avec?

Merci!

METTRE À JOUR

Le script complet est:

 result = getField(req, field); result = S(result).sortingm().collapseWhitespace().s; // at this point result = "нам #интересны наши #идеи" result = jsesc(result, { 'quotes': 'double' }); // now i end up with Unicode as above above (\u....) var hashtags = FlowdockText.extractHashtags(result); 

FlowDock reçoit le result qui est

 \u043D\u0430\u043C #\u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u044B \u043D\u0430\u0448\u0438 #\u0438\u0434\u0435\u0438 

Et n’en extrait pas les hashtags …

Ce sont 2 représentations de la même chaîne:

 'нам #интересны наши #идеи' === '\u043D\u0430\u043C #\u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u044B \u043D\u0430\u0448\u0438 #\u0438\u0434\u0435\u0438' 

ressemble à flowdock-text ne fonctionne pas bien avec les caractères non-ASCII

UPD: Essayé, fonctionne réellement bien:

 fdt.extractHashtags('\u043D\u0430\u043C #\u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u044B \u043D\u0430\u0448\u0438 #\u0438\u0434\u0435\u0438'); 

Vous n’auriez pas dû utiliser l’échappement en premier lieu, cela vous donne une représentation littérale de chaîne (convient à eval , etc.), pas une chaîne.

UPD2: J’ai réduit votre code à celui-ci:

 var jsesc = require('jsesc'); var fdt = require('flowdock-text'); var result = 'нам #интересны наши #идеи'; result = jsesc(result, { 'quotes': 'double' }); var hashtags = fdt.extractHashtags(result); console.log(hashtags); 

Comme je l’ai dit, le problème vient de jsesc : vous n’en avez pas besoin. Il retourne une chaîne codée en javascript. Vous avez besoin lorsque vous effectuez une eval avec une concaténation pour vous protéger de l’injection de code, ou quelque chose comme cela. Par exemple, si vous ajoutez result = eval('"' + result + '"'); , ça va marcher.

Quelle est la nécessité de le convertir en cette représentation?

jsesc est une bibliothèque JavaScript permettant d’ échapper aux chaînes JavaScript tout en générant la sortie valide la plus courte possible uniquement en ASCII. Voici une démo en ligne.

Cela peut être utilisé pour éviter mojibake et d’autres problèmes d’encodage, ou même pour éviter des erreurs lors de la transmission de données au format JSON (pouvant contenir U + 2028 LINE SEPARATOR, U + 2029 PARAGRAPH SEPARATOR ou des substituts isolés ) à un parsingur syntaxique JavaScript ou à un UTF. -8 encodeur, respectivement.

On dirait que dans ce cas, vous n’avez pas l’intention d’utiliser jsesc.

Essaye ça:

 decodeURIComponent("\u043D\u0430\u043C #\u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u044B \u043D\u0430\u0448\u0438 #\u0438\u0434\u0435\u0438");