Comment puis-je identifier les caractères non ASCII du shell?

12

Yat - il un moyen simple d'imprimer tous les caractères non-ASCII et les numéros de ligne sur lequel ils se produisent dans un fichier en utilisant une ligne de commande utilitaire tel que grep, awk, perl, etc?

Je veux changer le codage d'un fichier texte de UTF-8 en ASCII, mais avant de le faire, je souhaite remplacer manuellement toutes les instances de caractères non ASCII pour éviter les changements de caractères inattendus effectués par la routine de conversion de fichier.

user001
la source

Réponses:

13
$ perl -ne 'print "$. $_" if m/[\x80-\xFF]/'  utf8.txt
2 Pour être ou ne pas être
4 Byť či nebyť
5 是或不

ou

$ grep -n -P '[\x80-\xFF]' utf8.txt
2:Pour être ou ne pas être
4:Byť či nebyť
5:是或不

où utf8.txt est

$ cat utf8.txt
To be or not to be.
Pour être ou ne pas être
Om of niet zijn
Byť či nebyť
是或不
RedGrittyBrick
la source
1
Merci. L'extrait perl fonctionne directement, mais la version grep ne fonctionne pas avec GNU grep 2.16. J'ai pu le faire fonctionner via:, LC_ALL=C grep -n -P [$'\x80'-$'\xFF']où le premier bit désactive le classement.
Joe Corneli
4

Je veux changer l'encodage d'un fichier texte de UTF-8 en ASCII ...

... remplacer toutes les instances de caractères non ASCII ...

Dites ensuite à votre outil de conversion de le faire.

$ iconv -c -f UTF-8 -t ASCII <<< 'Look at 私.'
Look at .

$ iconv -c -f UTF-8 -t ASCII//translit <<< 'áēìöų'
aeiou
Ignacio Vazquez-Abrams
la source
Il a dit qu'il voulait faire ce remplacement manuellement. Le remplacement le plus approprié dépend peut-être du contexte.
mark4o