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