2017-04-07 10 views
0

Est-il possible de coder la sortie d'une commande grep en UTF-8, quel que soit le codage du fichier d'entrée?Le grep peut-il sortir le résultat en UTF-8?

J'exécute une instruction grep dans un script python (sous-processus) et je veux garantir que les octets résultants sont UTF-8.

Exemple:

grep -P "ÄA" -m -1 file.txt 

Je ne sais pas l'encodage d'entrée du fichier ...

+1

Non, ce n'est pas le travail de grep. Il existe un outil différent pour le recodage: 'iconv'. –

+3

En outre, il n'est jamais possible de recoder quelque chose "quel que soit le codage du fichier d'entrée". Vous pouvez seulement recoder quelque chose avec un encodage connu, vous en choisissez un explicitement. Vous pouvez utiliser un outil pour * deviner * aux encodages, mais deviner peut être faux. –

+0

@MartijnPieters thx: pour les clarifications, j'ai pensé à ça, mais je n'étais pas sûr :-) – Gabriel

Répondre

2

Grep suit the UNIX philosophy, qui est, il ne une chose, et il le fait bien une chose . L'encodage de fichiers ne fait pas partie de cette chose.

C'est ce que font d'autres outils. Il y a un autre outil qui fait le décodage de caractères et l'encodage bien, appelé iconv. Utilisez-le pour changer le codage du fichier d'entrée en UTF-8.

Cela vous oblige à connaître le codage du fichier d'entrée. Si vous ne savez pas, vous devez deviner, basé sur l'analyse heuristique du fichier d'entrée (il sera difficile d'être certain, en reconnaissant que quelque chose a été décodé en utilisant le mauvais codec nécessite généralement un humain pour vérifier le résultat). Il existe également un outil appelé enca. Cet outil peut également faire la conversion une fois qu'une estimation a été faite. Il s'agit généralement d'une installation distincte (elle ne fait pas partie du jeu d'outils POSIX par défaut commun). Voir How to auto detect text file encoding? sur Super utilisateur pour plus d'options. Cependant, étant donné que les outils de recherche de codecs doivent le faire en utilisant l'analyse statistique, il est préférable de faire la supposition sur le fichier d'entrée, pas sur la sortie grep.

Rien de tout cela n'a rien à voir avec Python, bien sûr. Sauf si vous vouliez faire la détection d'encodage en Python à la place, à quel point vous voulez regarder le chardet library.