Pergunta

Eu tenho uma coleção de arquivos codificados no ANSI ou UTF-16LE. Eu gostaria que o Python abra os arquivos usando a codificação correta. O problema é que os arquivos ANSI não levantam nenhum tipo de exceção quando codificados usando o UTF-16LE e vice-versa.

Existe uma maneira direta de abrir os arquivos usando a codificação de arquivo correta?

Foi útil?

Solução

Use o chapé Biblioteca para detectar a codificação.

Outras dicas

Você pode verificar o Bom No início do arquivo para verificar se é UTF.

Então unicode.decode de acordo (usando um dos codificação padrão).

EDITAROu, talvez, tente s.Decode ('ASCII') Sua sequência (dada S é o nome da variável). Se ele lança UnicodEdEcodeError, decodifique -o como 'UTF_16_LE'.

O que há nos arquivos? Se for um texto simples em um alfabeto em latim, quase todos os outros byte os arquivos UTF-16LE serão zero. Nos arquivos Windows-1252, por outro lado, eu não esperaria ver nenhum zeros. Por exemplo, aqui está “Hello” no Windows-1252:

93 48 65 6C 6C 6F 94

... e no UTF-16LE:

1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20

Além das citações encaracoladas, cada caractere mapeia o mesmo valor, com a adição de um byte zero à direita. De fato, isso é verdade para todos os caracteres no conjunto de caracteres ISO-8859-1 (o Windows-1252 estende ISO-8859-1 para adicionar mapeamentos para vários caracteres de impressão-como citações encaracoladas-para substituir os caracteres de controle no intervalo 0x80..0x9F).

Se você sabe que todos os arquivos são Windows-1252 ou UTF-16LE, uma varredura rápida para zeros deve ser tudo o que você precisa descobrir qual é qual. Há uma boa razão para que o charda seja tão lento e complexo, mas neste caso acho que você pode se safar rápido e sujo.

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