2010-02-12 9 views
7

¿Alguien sabe si existe una forma simple de detectar la codificación de juegos de caracteres en Java? Me parece que algunos programas tienen la capacidad de detectar qué conjunto de caracteres utiliza una determinada pieza de datos, o al menos hacer una aproximación.Cómo detectar qué conjunto de caracteres codifica en Java?

Supongo que el mecanismo subyacente tendría que decodificar los datos en cada conjunto de caracteres y elegir el que tenga los caracteres menos indefinidos, seguido de qué conjunto de caracteres es más común para romper un empate.

¿Alguna idea?

+0

¿De qué entrada estamos hablando? ¿Byte array (binary) o char array (String)? ¿Cuáles te gustaría distinguir entonces? Se puede hacer solo para conjuntos de caracteres Unicode (con marcas de orden de bytes), pero no para otros. – BalusC

+1

Esto puede ser complicado. En este sitio, pfarland está utilizando algunas heurísticas: http://forums.sun.com/thread.jspa?threadID=279203#3 – mre

+1

Temas relacionados: http://stackoverflow.com/questions/499010/java-how-to -determine-the-correct-charset-encoding-of-a-stream y http://stackoverflow.com/questions/1888189/java-readers-and-encodings – BalusC

Respuesta

-3

Para encontrar si los datos están en cualquier formato Unicode (UTF-8, UTF-16 ... etc.) puede leer los datos en bytes y verificar los primeros 4 bytes (tamaño BOM), y para cada codificación será diferente

por ejemplo:

para UTF-8 primeros 3 bytes habrá EF, BB, BF

para codificaciones distintas de las codificaciones Unicode no estoy seguro ...

+4

La lista de materiales UTF-8 opcional solo es útil si está presente : http://en.wikipedia.org/wiki/Byte_order_mark – trashgod

+0

@sreejith .. la solución de BOM anterior solo se puede utilizar para indicar que un archivo no es UTF-8 (en cuyo caso no comenzará con la lista de materiales determinada). Pero si la lista de materiales está presente, puede ser UTF-8 o no. Por ej. tal vez para algún otro archivo los bytes iniciales "EF, BB, BF" son realmente datos válidos. –

1

Eche un vistazo al jchardet, una biblioteca portada desde el navegador Mozilla que se especializa en "adivinar" el juego de caracteres de un documento.

Como alternativa, la biblioteca cpdetector, un poco más nueva, se especializa en detectar la página de códigos de un documento.

Cuestiones relacionadas