Pergunta

Eu estou no OS X 10.5.5 (embora não importa muito eu acho)

Eu tenho um conjunto de arquivos de texto com personagens extravagantes como crase duplos, ellipsises ( "...") em um caractere etc.

Eu preciso converter esses arquivos para boa ASCII 7-bit velho liso, de preferência sem perder significado de caracteres (isto é, converter esses elipses para três períodos, crase a usual "s etc.).

Por favor, informe alguns de linha de comando inteligente (bash) Ferramenta / script para fazer isso.

Foi útil?

Solução

O Elinks navegador irá converter entidades de Unicode para seus equivalentes ASCII, dando coisas como "-" para "-" e "..." para "...", etc. Existe um módulo python python-elinks que utiliza a mesma tabela de conversão, e seria trivial para transformá-lo em um filtro de shell, como este:

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

Outras dicas

iconv deve fazê-lo, tanto quanto eu sei. Não 100% de certeza sobre como ele lida com conversões onde um caractere de entrada deve / pode se tornar vários personagens de saída, como com o exemplo reticências ... Algo para tentar!

Update: Eu tentei isso, e parece que não funciona. Ele falha, possivelmente, uma vez que não sei como expressar reticências (o caráter de teste eu usei) em uma codificação de "menor". Conversão de UTF-8 para UTF-16 correu bem. : / Ainda assim, iconv pode valer a pena investigar mais

.

Tenha um olhar em ferramentas de transliteração; I como Unidecode (em Perl) , e não é muito difícil para a porta para outros idiomas.

Eu tenho iconv usado para converter um arquivo de UTF-16LE (little-endian como eu descobri por tentativa e erro), que foi criado por TextPad no Windows em ASCII no OSX assim:

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

Você pode canalizar através hexdump bem para ver os personagens e certifique-se que você está recebendo a saída direita, o terminal sabe interpretar UTF-16 e exibe-lo corretamente para que você não pode dizer apenas, mas fazendo 'gato' no arquivo:

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

Isso mostra a disposição com os códigos hex CHAR e os caracteres ASCII para o lado direito, e você pode experimentar diferentes codificações no -f "de" parâmetro para descobrir o que você está lidando.

Use 'iconv -l' para listar os conjuntos de caracteres iconv pode usar em seu sistema.

Houve uma pergunta ontem ou no dia anterior renomeação sobre o arquivo, e eu mostrei um rename.pl script Perl que seria útil para a tarefa. A área problema é saber como os caracteres ímpares são codificados, e conceber a sequência correcta de transliteraciones. Eu provavelmente fazê-lo com uma adaptação do que script que fez todos os mapeamentos sequencialmente. Fazê-lo um carácter de cada vez seria indevidamente complicados.

pergunta era: Como renomear com prefixo / sufixo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top