2010-02-14 32 views
5

Tengo un archivo que está codificado en ANSI. Sin embargo, muestra letras árabes dentro de ella. este archivo de texto fue generado por algún programa (no tengo información) pero parece que hay algún tipo de codificación interna (si se me permite y si es posible) para que las letras árabes aparezcan.¿Cómo hacer que un archivo de texto tenga más de una codificación?

¿Existe tal cosa? Si no, ¿cómo puede el archivo ANSI mostrar las letras en árabe?

* Si es posible explicar en código Java


Edición 01

Cuando lo abro en Notepad ++ se nota que la codificación de la página es ANSI. Por favor, compruebe esta foto:

http://www.4shared.com/file/221862075/e8705951/text-Windows.html


Edición 02

puede comprobar el archivo en a partir de:

http://www.4shared.com/file/221853641/3fa1af8c/data.html

+1

¿tiene acceso a Linux? si es así, ¿qué dice el comando 'file'? –

+0

No, no tengo acceso a Linux ... si lo hace y me gustaría ayudarlo, descargue mi archivo del enlace que proporcioné en la Edición 02 y dígame qué obtiene. Aprecio tu cooperacion. –

+1

@ João 'file' produce BS en este archivo. :-( –

Respuesta

3

Intenté abrir el archivo en Firefox y Opera. Tuve que configurar la codificación de caracteres en árabe Windows-1256 para que se muestre correctamente en ambos navegadores, por lo que la codificación del archivo es más probable que sea eso.

NOTA: Originalmente publiqué esto como un comentario, pero me pidieron que lo convirtiera en una respuesta.

+0

Gracias de nuevo ... Sus pruebas simples (que nunca pensé hacer) encontraron la solución para mi problema, que desperdició 8 horas de mi tiempo. Gracias 100000000 veces :) –

+1

+1: por usar navegadores :) (y ser correcto) –

4

¿Cómo sabe que está codificado ANSI? Si no es una codificación multibyte como UTF-8, supongo que está codificada usando una página de códigos árabes como esta: Windows-1256.

Puede ver el archivo en un editor hexadecimal y averiguar qué números tienen los caracteres árabes y de esa manera tratar de averiguar con qué página de codificación/código se creó.

+1

Sí, esa es. –

4

Respuesta corta: Probablemente, su archivo de texto no está codificado en "ANSI", pero utf-8.

Respuesta larga:

En primer lugar, el término "ANSI" (en Windows) no significa una codificación fija; su significado depende de su configuración de idioma. Por ejemplo, en Europa occidental y EE. UU., Por lo general será Windows-1252 (una variante de ISO/IEC 8859-1, also known as latin-1), en Japón, es SHift JIS, y en los países árabes, es ISO/IEC_8859-6.

Si está utilizando una versión no árabe de Windows y no ha cambiado su configuración de idioma, y ​​puede ver letras en árabe en el archivo cuando lo abre en el Bloc de notas, entonces ciertamente no está en ninguna de estas codificaciones ANSI . En cambio, probablemente sea Unicode.

Tenga en cuenta que no me refiero a "UNICODE", que en Windows generalmente significa UTF-16LE. Podría ser UTF-8 también. Ambas son codificaciones que pueden codificar todos los más de 100.000 caracteres definidos actualmente en Unicode, pero lo hacen de diferentes maneras. Ambos son variable length encodings, lo que significa que no todos los caracteres están codificados con la misma cantidad de bits.

En UTF-8, cada carácter está codificado de uno a cuatro bytes. La codificación se ha elegido de modo que los caracteres ASCII estén codificados en un byte.

En UTF-16, cada carácter se codifica como dos cuatro bytes. Esta codificación se inventó originalmente cuando Unicode tenía menos de 64K caracteres y, por lo tanto, uno podía codificar cada carácter en una sola palabra de 16 bits.Más tarde, cuando quedó claro que Unicode tendría que crecer más allá del límite de 64 KB, se inventó un esquema donde los pares de palabras en el rango 0xD800-0xDFFF se usan para representar caracteres fuera de los primeros 64K (menos 0x800) caracteres.

para ver lo que en realidad está en el archivo, abrirlo en un editor hexadecimal:

  • Si los dos primeros bytes son FF FE, entonces es probable UTF-16LE (little endian)
  • Si el primeros dos bytes son FE FF, entonces es probable UTF-16BE (big endian, poco probable en Windows)
  • Si los tres primeros bytes son EF BB BF, entonces es probable UTF-8
  • Si ves un montón de 00 Bytes, es probable UTF-16 (o UTF-32, si ve pares de 00 BYtes)
  • Si los caracteres árabes ocupan un solo byte, es probable ISO-8859-6 (p. ش sería D5).
  • Si los caracteres árabes ocupan múltiples Bytes, es probable que UTF-8 (por ejemplo, ش sería D8 B4).
+0

¡Información interesante! Gracias :) –

4

¿Existe alguna cosa?

Si no, ¿cómo puede el archivo ANSI mostrar las letras árabes?

No es un archivo codificado de Windows-ANSI. Es más probable que use un variable-width encoding, probablemente UTF-8: muchas posiciones de caracteres comunes en UTF-8 son equivalentes a sus posiciones en US-ASCII (de hecho, fue diseñado de esa manera), y por deducción también para Windows- ANSI.

EDIT: Tenemos que agradecer a Microsoft por esta confusión. "ANSI" no está bien especificado cuando se trata de codificaciones. Por lo general, está destinado a representar la codificación predeterminada de Windows con la página de códigos 1252 ("Windows-1252"), que corresponde a los alfabetos "occidentales" derivados del latín.

Sin embargo, en otros países el utilizado por defecto de Windows (en las versiones anteriores de Windows ... Hoy, el valor predeterminado es UTF-8) es no de Windows-1252, sino más bien una codificación diferente, que está a continuación, también llamado “ANSI ". En este caso, la página de códigos 1256.

+0

Por favor comprueba esta foto: http://www.4shared.com/file/221862075/e8705951/text-Windows.html –

+1

@MAK: compruébalo con un editor hexadecimal. En cualquier caso, Notepad ++ debe estar mintiéndole. –

+0

¿Alguna recomendación para el editor hexadecimal? Se prefiere la compatibilidad con Mac. –

1

La codificación de caracteres ANSI permite 217 caracteres y no contiene letras árabes. Creo que tal vez el archivo usa una codificación alternativa.

Al modificar su edición, parece que el problema está en Notepad ++, porque lo que se muestra está claramente más allá de las capacidades del juego de caracteres ANSI.

+1

¿Cómo se llega a 217 caracteres? ¿Estos son los personajes imprimibles? –

+1

Sí, son imprimibles. Supongo que hay más no imprimible. – spender

+1

Es muy posible que el archivo sea UTF-8, pero ¿qué hay de la posibilidad de páginas de códigos? * Había * caracteres * no ingleses en las computadoras antes de UTF-8. –

1

primero descargué su archivo e intenté usar vim para verificar su codificación y no parecía saberlo y en una segunda máquina dijo latin1 que podría ser similar a lo que sucedió en el bloc de notas ++ (dio la respuesta genérica).
así lo hice file data.txt y la salida era la siguiente:

data.txt: ISO-8859 text, with CRLF line terminators 

esperanza esto ayuda.

EDITAR:
utilizando el navegador que mostraron que esta respuesta es incorrecta.

ISO-8859-4 e ISO-8859-13 podrían mostrar el texto, sin errores, pero los caracteres no están en árabe.

Cuestiones relacionadas