-1
votes

Convertir \ u003c vers

d'un appel Ajax, j'ai récupéré quelque chose comme ceci: xxx

i 'd aime le convertir en un format "utilisable", donc \ u0003c sera simplement un caractère << / code>.

L'en-tête de l'appel AJAX indique qu'il s'agit d'un codage ISO-8859-2 (type de contenu: texte / plaine; caractères = iso -8859-2), mais je ne suis pas sûr.

J'ai essayé d'utiliser iconv avec de nombreuses options, mais pas de chance.

Qu'est-ce qui est intéressant est que, par exemple, ce site: xxx

fait l'affaire sans rien, je ne peux tout simplement pas savoir ce que devrait être le "de l'encodage".

Je serais heureux d'utiliser iconv .


1 commentaires

Vous ne devriez pas avoir besoin de deviner. L'appel d'API renvoie-t-il JSON ou non? Si tel est le cas, vous pouvez déposer un rapport de non-conformité lorsque les RFC disent que JSON doit être codé UTF-8. En attendant, vous pouvez convertir de ce que l'en-tête dit que le codage est. Ensuite, utilisez une bibliothèque JSON. Écrire votre propre code pour simplement analyser les escapades de l'unité de code UTF-16 de JSON n'obtient pas le travail entier.


3 Réponses :


0
votes

Le moyen le plus simple de le faire est d'un analyseur JSON pour votre langue de choix, ce qui la convertira en une structure de données appropriée et une n'excédant pas. Ce que vous voyez est une évasion unicode représentant U + 003c, qui est le caractère << / code>. Les analyseurs JSON échappent souvent aux crochets d'angle car ils ont une signification spéciale dans HTML et XML, et les échappant signifie que le JSON peut être inséré littéralement dans ces types de documents.

Alternativement, si vous souhaitez y échapper de la ligne de commande sans traitement ils, vous pouvez le faire pipi à Perl ou à rubis pour le faire, comme ceci: xxx

ou xxx

Notez que Le codage que vous obtenez du serveur est probablement un hareng rouge. JSON est tenu d'être dans Unicode et il est probable que le serveur soit juste mal configuré. Si vous êtes certain que les données sont en réalité dans l'ISO-8859-2, en violation de la spécification, vous pouvez la résoudre en tuyau de la sortie de la commande suivante à l'un des perl ou Ruby commande ci-dessus: xxx


0 commentaires

1
votes

Le jeu de caractères est simplement ASCII. Ce sont des codes d'évacuation utilisés par ex. Par JavaScript (et Python).

Si la valeur que vous recevez de l'appel AJAX est valide JSON (comme probablement ce sera), utilisez un outil JSON pour l'extraire. P>

bash$ jq -r .d <<\:
{"d":"\u003cdiv class=\"popup_title\"\u003eBENTELER Autótechnika Kft.\u003c/div\u003e\u003cdiv style=\"font-size:10pt;font-weight:bold;\"\u003e8060 Mór, Akai út 5."}
:
<div class="popup_title">BENTELER Autótechnika Kft.</div><div style="font-size:10pt;font-weight:bold;">8060 Mór, Akai út 5.


3 commentaires

Merci, cela fonctionne bien, cependant redirigeant la sortie de la JQ dans un fichier donnant un résultat étrange ( Github. COM / Stedolan / JQ / Problèmes / 1110 ). Bien sûr, c'est solv (e) capable.


Désolé, la typo fixe; .d pas -d


Les caractères accentués ne sont bien sûr pas ASCII - car ils s'affichent correctement pour vous, ils sont probablement dans le codage par défaut de votre système, ce que je devine est UTF-8 si vous êtes sur une plate-forme sensible et si vous êtes ridiculement improbable si vous êtes sur Les fenêtres.



0
votes

Vous pouvez utiliser le % B Formatage de la directive de Bash's printf : xxx

du manuel:

% b
Causes PrintF Pour développer les séquences d'évacuation des déchets arrière dans l'argument correspondant de la même manière que echo -e (voir Bash intégré ).


Comme Charles souligne dans son commentaire, % b en tant que tel n'est pas limité au de Bash , mais requis par Posix ; L'interprétation de \ u hhhh s'échappe, d'autre part, ne se produit que dans BASH, comme décrit dans les séquences d'échappement pour ECHO .


1 commentaires

printf% b est spécifié POSIX , pas un bashism (bien que \ u003c support est un bashisme; et évidemment, la définition POSIX ne fait pas référence à la spécification-violation de l'utilisation de Echo -e Pour faire autre chose que l'impression -e sur la sortie).