Eu tive alguns problemas com arquivos de legenda no omxplayer de vídeo. Para resolvê-lo, tive que converter da codificação windows-1250 para UTF-8. Minha pergunta é: como posso ver em algum arquivo específico qual codificação é usada?
Eu tive alguns problemas com arquivos de legenda no omxplayer de vídeo. Para resolvê-lo, tive que converter da codificação windows-1250 para UTF-8. Minha pergunta é: como posso ver em algum arquivo específico qual codificação é usada?
Respostas:
Você não consegue descobrir automaticamente se um arquivo foi gravado com a codificação X originalmente.
O que você pode fazer com facilidade é verificar se o arquivo completo pode ser decodificado com êxito de alguma forma (mas não necessariamente corretamente) usando um codec específico. Se você encontrar bytes inválidos para uma determinada codificação, deve ser outra coisa.
O problema é que muitos codecs são semelhantes e têm os mesmos "padrões de bytes válidos", apenas interpretando-os como caracteres diferentes. Por exemplo, uma ä
codificação em uma pode corresponder a é
outra ou a ø
uma terceira. O computador não pode realmente detectar qual maneira de interpretar o byte resulta em texto legível corretamente (a menos que talvez você adicione um dicionário para todos os tipos de idiomas e permita que ele execute verificações ortográficas ...). Você também deve saber que alguns conjuntos de caracteres são realmente subconjuntos de outros, como, por exemplo, a codificação ASCII faz parte dos codecs mais usados, como alguns da família ANSI ou UTF-8. Isso significa, por exemplo, que um texto salvo como UTF-8 que contém apenas caracteres latinos simples, seria idêntico ao mesmo arquivo salvo como ASCII.
No entanto, vamos voltar a explicar o que você não pode fazer com o que realmente pode fazer:
Para uma verificação básica nos arquivos de texto ASCII / não ASCII (normalmente UTF-8), você pode usar o file
comando Porém, ele não conhece muitos codecs e examina apenas os primeiros kB de um arquivo, assumindo que o restante não contenha novos caracteres. Por outro lado, também reconhece outros tipos de arquivos comuns, como vários scripts, documentos HTML / XML e muitos formatos de dados binários (o que é desinteressante para comparar arquivos de texto) e pode imprimir informações adicionais, se houver linhas extremamente longas ou o que tipo de sequência de nova linha (por exemplo, UNIX: LF, Windows: CR + LF) é usado.
$ cat ascii.txt
I am an ASCII file.
Just text and numb3rs and simple punctuation...
$ cat utf8.txt
I am a Unicode file.
Special characters like Ω€®Ŧ¥↑ıØÞöäüß¡!
$ file ascii.txt utf8.txt
ascii.txt: ASCII text
utf8.txt: UTF-8 Unicode text
Se isso não for suficiente, posso oferecer o script Python que escrevi para esta resposta aqui , que verifica os arquivos completos e tenta decodificá-los usando um conjunto de caracteres especificado. Se for bem-sucedida, essa codificação é um candidato em potencial. Caso contrário, se houver algum bytes que não possa ser decodificado com ele, você poderá remover esse conjunto de caracteres da sua lista.
Um programa chamado file
pode fazer isso. Exemplo:
$ echo aaa >> FILE
$ file FILE
FILE: ASCII text, with CRLF, LF line terminators
$ echo öäü >> FILE
$ file FILE
FILE: UTF-8 Unicode text, with CRLF, LF line terminators
Se você estiver interessado em como isso é feito, consulte src/encoding.c
.
file
faz um palpite, e freqüentemente não é muito bom. Por exemplo, nos meus testes, ele identificou incorretamente o MacRoman e o CP-1252 como ISO-8859, com o resultado de que "š" e "ß" foram embaralhados.
.sql
arquivo antigo e file
mostrei ao meu que é realmente um gzip
arquivo compactado!
piconv
alterar a codificação;)