Caráter Algoritmo de Detecção Encoding

votos
43

Eu estou procurando uma maneira de detectar conjuntos de caracteres dentro de documentos. Estive lendo o conjunto de caracteres implementação detecção Mozilla aqui:

Detecção Charset Universal

Eu também encontrei uma implementação Java deste chamado jCharDet:

JCharDet

Ambos são baseados em pesquisas realizadas utilizando um conjunto de dados estáticos. O que eu estou querendo saber é se alguém tem usado qualquer outra implementação com sucesso e se assim o que? Você rolar sua própria abordagem e se assim o que era o algoritmo usado para detectar o conjunto de caracteres?

Qualquer ajuda seria apreciada. Eu não estou olhando para uma lista de abordagens existentes através do Google, nem estou procurando um link para o artigo Joel Spolsky - só para esclarecer:)

UPDATE: Eu fiz um monte de investigação sobre isso e acabou encontrando um quadro chamado cpdetector que usa uma abordagem conectável à detecção personagem, veja:

CPDetector

Isto proporciona BOM, chardet (abordagem Mozilla) e encaixes de detecção ASCII. É também muito fácil de escrever o seu próprio. Há também um outro quadro, que fornece muito melhor detecção de caráter que a abordagem Mozilla / jchardet etc ...

ICU4J

É muito fácil escrever seu próprio plugin para cpdetector que usa essa estrutura para fornecer um algoritmo de detecção de codificação de caracteres mais precisos. Ele funciona melhor do que a abordagem Mozilla.

Publicado 21/04/2009 em 19:56
fonte usuário
Em outras línguas...                            


2 respostas

votos
9

Anos atrás, tivemos detecção de conjunto de caracteres para um aplicativo de correio, e nós rolamos nossa própria. O aplicativo de correio era na verdade um aplicativo WAP, eo telefone esperado UTF-8. Havia várias etapas:

Universal

Poderíamos facilmente detectar se o texto foi UTF-8, como não há um padrão de bits específico nos principais pedaços de bytes 2/3 / etc. Uma vez que você descobriu que padrão repetido um determinado número de vezes que você pode estar certo de que era UTF-8.

Se o arquivo começa com uma marca de ordem de byte UTF-16, você provavelmente pode assumir o resto do texto é que a codificação. Caso contrário, a detecção de UTF-16 não é tão fácil como UTF-8, a menos que você pode detectar o padrão de pares substitutos, mas o uso de pares substitutos é raro, de modo que não costuma funcionar. UTF-32 é semelhante, excepto não existem pares de substituição para detectar.

detecção Regional

Em seguida, assumiria o leitor estava em uma determinada região. Por exemplo, se o usuário estava vendo a interface do usuário localizada em japonês, que poderia, então, tentar a detecção das três principais codificações japonesas. ISO-2022-JP é novamente leste de detectar com as sequências de escape. Se isso falhar, determinar a diferença entre EUC-JP e Shift-JIS não é tão simples. É mais provável que um usuário receberia texto Shift-JIS, mas havia caracteres em EUC-JP que não existiam em Shift-JIS, e vice-versa, por isso às vezes você pode obter um bom jogo.

O mesmo procedimento foi utilizado para codificações chineses e de outras regiões.

escolha do usuário

Se estes não forneceu resultados satisfatórios, o usuário deve escolher manualmente uma codificação.

Respondeu 21/04/2009 em 20:15
fonte usuário

votos
7

Não é exatamente o que você pediu, mas notei que o projeto UTI inclui um CharsetDetector classe.

Respondeu 23/04/2009 em 10:41
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more