J'essaie de convertir un guillemet simple droit en apostrophe en utilisant tr
.
tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
étant donné un fichier encodé en UTF-8 appelé a
qui contient cet exemple :
We're not a different species
“All alone?” Jeth mentioned.
OS X utilise le BSD tr
et produit un joli résultat :
We're not a different species
“All alone?” Jeth mentioned.
Ubuntu utilise le GNU tr
et produit ce mauvais résultat :
We'''re not a different species
''<9C>All alone?''<9D> Jeth mentioned.
Comment puis-je accomplir cette conversion dans Ubuntu ?
Réponse acceptée :
Vous pouvez essayer un autre outil, comme sed
:
$ sed "s/’/'/g" <a
We're not a different species
“All alone?” Jeth mentioned.
Ou, puisque nous faisons une traduction simple, utilisez le y
commande pour sed
:
$ sed "y/’/'/" <a
We're not a different species
“All alone?” Jeth mentioned.
GNU tr
ne fonctionne probablement pas parce que :
Actuellement
tr
ne prend entièrement en charge que les caractères à un octet.
Finalement, il prendra en charge les caractères multi-octets ; quand c'est le cas, le-C
l'amènera à compléter le jeu de caractères, alors que-c
l'amènera à compléter l'ensemble de valeurs. Cette distinction n'aura
d'importance que lorsque certaines valeurs ne sont pas des caractères, et cela n'est possible
que dans les paramètres régionaux utilisant des encodages multi-octets lorsque l'entrée contient
des erreurs d'encodage.
Et ’
est un caractère multioctet :
$ echo -n \' | wc -c
1
$ echo -n ’ | wc -c
3