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?
23
piconv
alterar a codificação;)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.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.
fonte
Um programa chamado
file
pode fazer isso. Exemplo:Se você estiver interessado em como isso é feito, consulte
src/encoding.c
.fonte
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 efile
mostrei ao meu que é realmente umgzip
arquivo compactado!