Detectar a presença de uma codificação específica
-
13-09-2019 - |
Pergunta
Eu preciso de uma maneira de detectar se um arquivo contém caracteres de um determinado charset.
Especificamente, eu quero detectar a presença de caracteres cirílicos codificado-UTF8 em uma série de arquivos. Existe uma ferramenta para fazer isso?
Graças
Solução
Se você está procurando solução pronta, você pode querer tentar Enca .
No entanto, se você só quer detectar a presença do que pode ser, possivelmente, decodificado como UTF-8 caracteres cirílicos (sem completas UTF-8 verificações de validade), você só tem que pesquisar por algo como /(\xD0[\x81\x90-\xBF]|\xD1[\x80-\x8F\x91]){
n ,}/
(este regexp exata é para n caracteres cirílico codificado-UTF8 subsequentes). Para verificação adicional que todo o arquivo contém dados válidos apenas UTF-8 que você pode usar algo como isutf8(1)
.
Ambos os métodos têm seus bons e maus lados e às vezes podem dar resultados errados.
Outras dicas
IIRC a biblioteca ICU tem código que faz a detecção do conjunto de caracteres. Embora seja basicamente um melhor palpite esforço.
Edit: eu me lembrava corretamente, confira este papel / tutorial