Question

Je suis sous OS X 10.5.5 (bien que je suppose que ça n'a pas beaucoup d'importance)

J'ai un ensemble de fichiers texte avec des caractères de fantaisie tels que des doubles guillemets, des ellipses ("...") dans un caractère, etc.

Je dois convertir ces fichiers au bon vieux fichier ASCII 7 bits ordinaire, de préférence sans perdre la signification des caractères (c’est-à-dire, convertir ces ellipses en trois points, des guillemets en "habituels", etc.).

Veuillez conseiller un outil / script intelligent en ligne de commande (bash) pour le faire.

Était-ce utile?

La solution

Le navigateur Web Elinks convertira les entités Unicode en leurs équivalents ASCII, donnant des informations telles que " - " pour " - " et " ... " etc. Il existe un module python python-elinks . qui utilise la même table de conversion, et il serait trivial de le transformer en filtre shell, comme ceci:

#!/usr/bin/env python
import elinks
import sys
for line in sys.stdin:
    line = line.decode('utf-8')
    sys.stdout.write(line.encode('ASCII', 'elinks'))

Autres conseils

iconv devrait le faire, autant que je sache. Pas tout à fait certain de la façon dont il gère les conversions dans lesquelles un caractère d'entrée devrait / pourrait devenir plusieurs caractères de sortie, comme avec l'exemple des points de suspension ... Quelque chose à essayer!

Mise à jour: Je l’ai essayé et il semble que cela ne fonctionne pas. Cela échoue, peut-être parce qu’il ne sait pas comment exprimer les points de suspension (le caractère de test que j’ai utilisé) dans un "plus petit". codage. La conversion de UTF-8 à UTF-16 s’est bien déroulée. : / Pourtant, iconv pourrait valoir la peine d’être approfondi.

Consultez les outils de translittération; J'aime Unidecode (en Perl) , et ce n’est pas trop difficile à porter dans d'autres langues.

J'ai utilisé iconv pour convertir un fichier UTF-16LE créé par TextPad sous Windows en ASCII sous OSX, comme ci-dessous:

 cat utf16file.txt |iconv -f UTF-16LE -t ASCII > asciifile.txt

Vous pouvez également utiliser hexdump pour afficher les caractères et vous assurer que vous obtenez le bon résultat, le terminal sait interpréter le format UTF-16 et l'affiche correctement, de sorte que vous ne pouvez pas le dire simplement en faisant "chat". sur le fichier:

cat utf16file.txt | iconv -f UTF-16LE -t ASCII | hexdump -C 

Ceci affiche la mise en page avec les codes de caractères hexadécimaux et les caractères ASCII sur le côté droit, et vous pouvez essayer différents codages dans l'option -f "à partir de". paramètre pour comprendre ce que vous avez affaire.

Utilisez 'iconv -l' pour répertorier les jeux de caractères que iconv peut utiliser sur votre système.

Hier ou avant-hier, vous avez posé une question sur le changement de nom de fichier. J'ai alors montré un script Perl rename.pl qui serait utilisable pour la tâche. Le problème est de savoir comment les caractères impairs sont codés et de concevoir la séquence correcte des translittérations. Je le ferais probablement avec une adaptation de ce script qui effectuait toutes les correspondances de manière séquentielle. Le faire un caractère à la fois serait trop compliqué.

La question était: Comment renommer avec préfixe / suffixe

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top