O comando file está mostrando que o conjunto de caracteres do arquivo é ISO-8859 em inglês, você pode usar o comando iconv para converter arquivos de um conjunto de caracteres para outro.
Exemplo
Para começar, temos o seguinte arquivo.
$ file a.srt
a.srt: ISO-8859 English text, with CRLF line terminators
Agora vamos converter o arquivo de ISO-8859-15 para utf-8 . Aqui estamos levando o arquivo a.srt para b.srt .
$ iconv -f ISO-8859-15 -t utf-8 a.srt > b.srt
Agora, o novo arquivo b.srt está no formato UTF-8 .
$ file b.srt
b.srt: UTF-8 Unicode English text, with CRLF line terminators
E os terminadores de linha CRLF?
Estes são típicos de arquivos que vêm de um PC. Em um PC, o fim das linhas é finalizado com um retorno de carro e um avanço de linha. Você pode ver esses caracteres se usar uma ferramenta como hexdump .
Exemplo
hexdump -C b.srt | head -5
00000000 31 0d 0a 30 30 3a 30 30 3a 31 36 2c 33 30 32 20 |1..00:00:16,302 |
00000010 2d 2d 3e 20 30 30 3a 30 30 3a 31 39 2c 36 38 30 |--> 00:00:19,680|
00000020 0d 0a 3c 69 3e 54 68 65 20 63 69 74 79 27 73 20 |..<i>The city's |
00000030 63 61 6c 6c 65 64 20 44 75 6b 65 0d 0a 54 68 65 |called Duke..The|
00000040 20 73 74 61 74 65 27 73 20 63 61 6c 6c 65 64 20 | state's called |
Observe a seqüência de caracteres 0d 0a . Estes são os "terminadores de linha CR" referenciados na saída dos comandos file . Você pode usar uma ferramenta como dos2unix para removê-las.
$ dos2unix -n b.srt c.srt
dos2unix: converting file b.srt to file c.srt in UNIX format ...
Agora, quando analisamos o arquivo resultante para dos2unix , c.srt .
$ hexdump -C c.srt | head -5
00000000 31 0a 30 30 3a 30 30 3a 31 36 2c 33 30 32 20 2d |1.00:00:16,302 -|
00000010 2d 3e 20 30 30 3a 30 30 3a 31 39 2c 36 38 30 0a |-> 00:00:19,680.|
00000020 3c 69 3e 54 68 65 20 63 69 74 79 27 73 20 63 61 |<i>The city's ca|
00000030 6c 6c 65 64 20 44 75 6b 65 0a 54 68 65 20 73 74 |lled Duke.The st|
00000040 61 74 65 27 73 20 63 61 6c 6c 65 64 20 4e 65 77 |ate's called New|
Observe que a sequência 0d 0a do arquivo b.srt foi convertida em 0a . Esse caractere é como o final das linhas é finalizado nos sistemas Unix.
Agora, quando verificarmos o arquivo c.srt usando file , observe que o arquivo não é mais relatado como terminado com terminadores de linha CRLF.
$ file c.srt
c.srt: UTF-8 Unicode English text
E os terminadores de linha CR?
Como @ resposta do TomH é um arquivo que termina usando apenas um CR, é de um Mac. Para deixar claro o ponto.
CR e LF são caracteres, respectivamente codificados 0x0D (13 decimal) e 0x0A (10 decimal). Eles são usados para marcar uma quebra de linha em arquivos de texto.
- O Windows usa dois caracteres, por exemplo,
CR LF sequence
- O Unix usa apenas
LF
- MacIntosh usou
CR
Quando a Apple passou a usar o OSX (que é baseado no BSD), eles mudaram para o LF , dado que o BSD está enraizado no Unix.
Veja o tópico da Wikipédia Newlines, que tem uma seção sobre Representações , abrange todos os diferentes sistemas e seus correspondentes novos caracteres de linha.
Referências