Domanda

Sono su OS X 10.5.5 (anche se non importa molto immagino)

Ho una serie di file di testo con personaggi fantasiosi come doppi backquotes, ellissi (" ... ") in un carattere ecc.

Ho bisogno di convertire questi file in un buon vecchio ASCII a 7 bit semplice, preferibilmente senza perdere il significato del carattere (cioè, convertire quelle ellissi in tre punti, backquotes in normali "ecc.).

Si prega di avvisare alcuni strumenti / script della riga di comando (bash) per farlo.

È stato utile?

Soluzione

Il browser Web Elinks convertirà le entità Unicode nei loro equivalenti ASCII, dando cose come " - " per " - " e " ... " per " ... " ;, ecc. Esiste un modulo python python-elinks che utilizza la stessa tabella di conversione e sarebbe banale trasformarlo in un filtro shell, come questo:

#!/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'))

Altri suggerimenti

iconv dovrebbe farlo, per quanto ne so. Non sono sicuro al 100% su come gestisce le conversioni in cui un carattere di input dovrebbe / potrebbe diventare più caratteri di output, come nell'esempio con i puntini di sospensione ... Qualcosa da provare!

Aggiornamento: l'ho provato e sembra che non funzioni. Non riesce, forse perché non sa come esprimere i puntini di sospensione (il carattere di prova che ho usato) in un "più piccolo" codifica. La conversione da UTF-8 a UTF-16 è andata bene. : / Tuttavia, vale la pena di approfondire ulteriormente iconv.

Dai un'occhiata agli strumenti di traslitterazione; Mi piace Unidecode (in Perl) e non è troppo difficile portarlo in altre lingue.

Ho usato iconv per convertire un file da UTF-16LE (little-endian come ho scoperto per tentativi ed errori) che è stato creato da TextPad in Windows in ASCII su OSX in questo modo:

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

Puoi anche passare attraverso hexdump per visualizzare i personaggi e assicurarti di ottenere l'output giusto, il terminale sa come interpretare UTF-16 e lo visualizza correttamente in modo da non poterlo dire ma facendo 'cat' sul file:

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

Questo mostra il layout con i codici esadecimali dei caratteri e i caratteri ASCII sul lato destro, e puoi provare diverse codifiche in -f " da " parametro per capire con cosa hai a che fare.

Usa 'iconv -l' per elencare i set di caratteri che iconv può usare sul tuo sistema.

C'è stata una domanda ieri o l'altro sulla ridenominazione dei file e ho mostrato uno script Perl rename.pl che sarebbe utilizzabile per l'attività. L'area del problema è sapere come vengono codificati i caratteri dispari e escogitare la corretta sequenza di traslitterazioni. Probabilmente lo farei con un adattamento di quello script che ha eseguito tutte le mappature in sequenza. Farlo un personaggio alla volta sarebbe eccessivamente complicato.

La domanda era: Come rinominare con prefisso / suffisso

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top