Question

J'ai un fichier qui est codé ANSI. Cependant, il montre les lettres arabes à l'intérieur. ce fichier texte a été généré par un programme (je n'ai pas d'info sur) mais il semble qu'il y ait une sorte de codage interne (si je puis dire, et s'il est possible) pour les lettres arabes pour faire apparaître.

Y at-il une telle chose? Sinon, comment le fichier ANSI peut montrer les lettres arabes?

* Si possible d'expliquer dans le code Java


Edition 01

Quand je l'ouvre dans Notepad ++, il montre que le codage de la page est ANSI. S'il vous plaît vérifier cette photo:

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


Edition 02

vous pouvez consulter le fichier à partir de:

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

Était-ce utile?

La solution

J'ai essayé d'ouvrir le fichier dans Firefox et Opera. Je devais définir le codage des caractères à l'arabe Windows 1256 pour l'obtenir pour afficher correctement dans les deux navigateurs, de sorte que l'encodage du fichier est plus susceptible d'être que.

NOTE: Je l'origine posté comme commentaire, mais on m'a demandé de faire une réponse.

Autres conseils

Comment savez-vous qu'il est codé ANSI? Si ce n'est pas un encodage multi-octets comme UTF-8, je pense serait qu'il est codé en utilisant une page de code arabe comme celui-ci: Windows 1256 .

Vous pouvez regarder le fichier dans un éditeur hexadécimal et savoir quels numéros les caractères arabes ont et ainsi essayer de savoir quel encodage / page de code, il a été créé.

Réponse courte : probablement, votre fichier texte n'est pas "ANSI" encodée, mais utf-8

.

Réponse longue :

Tout d'abord, le terme « ANSI » (sous Windows) ne signifie pas un codage fixe; c'est le sens dépend de vos paramètres de langue. Par exemple, en Europe occidentale et aux USA, il sera généralement Windows 1252 (un variante de ISO / IEC 8859-1, également connu sous le nom latin -1), Japon, il est Shift-JIS , et dans les pays arabes, il est ISO / IEC_8859-6

Si vous utilisez une version non-arabe de Windows et pilonnement pas changé vos paramètres de langue, et vous pouvez voir les lettres arabes dans le fichier lorsque vous l'ouvrez dans le Bloc-notes, alors il est certainement pas dans l'une de ces codages ANSI. Au lieu de cela, il est probablement Unicode .

Notez que je ne veux pas dire "UNICODE", qui sous Windows signifie généralement UTF-16LE . Il pourrait être UTF-8 ainsi. Les deux sont encodages qui peuvent coder tous les caractères 100.000+ actuellement définis dans Unicode, mais ils le font de différentes manières. Les deux sont codages de longueur variable , ce qui signifie que tous les caractères sont codés en utilisant le même nombre de les bits.

UTF-8, chaque caractère est codé comme un à quatre octets. Le codage a été choisie de telle sorte que les caractères ASCII sont codés sur un octet.

UTF-16, chaque caractère est codé soit comme deux à quatre octets. Ce codage a été initialement inventé quand Unicode avait moins de 64K caractères, et on pourrait donc coder tous les caractères en un seul mot de 16 bits. Plus tard, quand il est devenu clair que Unicode devrait croître au-delà de la limite de 64 Ko, un système a été inventé où les paires de mots dans la gamme 0xD800-0xDFFF sont utilisés pour représenter les caractères en dehors du premier caractères 64K (moins 0x800).

Pour voir ce qui est réellement dans le fichier, ouvrez-le dans un éditeur hexadécimal:

  • Si les deux premiers octets sont FF FE, alors il est probable UTF-16LE (little endian)
  • Si les deux premiers octets sont FE FF, alors il est probable UTF-16BE (big endian, peu probable sous Windows)
  • Si les trois premiers octets sont EF BB BF, alors il est probable UTF-8
  • Si vous voyez beaucoup de 00 octets, il est probable UTF-16 (ou UTF-32, si vous voyez des paires de 00 Bytes)
  • Si les caractères arabes occupent un seul octet, il est probable ISO-8859-6 (par exemple ش serait D5).
  • Si les caractères arabes occupent plusieurs octets, il est probable UTF-8 (par exemple ش serait J8 B4).
  

Y at-il une telle chose?

Non.

  

Dans le cas contraire, comment le fichier ANSI peut montrer les lettres arabes?

Il est pas un fichier codé Windows ANSI. Plus probablement, il utilise un encodage largeur variable , UTF-8 le plus probable: plusieurs positions de caractère commun en UTF-8 sont équivalents à leurs positions dans US-ASCII (en fait, il a été conçu de cette façon), et aussi par inférence pour Windows ANSI.

EDIT : Nous devons remercier Microsoft pour cette confusion. n'est pas bien spécifié « ANSI » en matière de codages. Habituellement, il est censé se tenir pour l'encodage par défaut de Windows avec codepage 1252 ( « Windows 1252 »), ce qui arrive à correspondre à alphabets « occidentaux » issus du latin.

Cependant, dans d'autres pays, l'encodage par défaut utilisé par Windows (dans les versions plus anciennes de Windows ... aujourd'hui, la valeur par défaut est UTF-8) est pas Windows 1252, mais plutôt un codage différent, qui est alors également appelé « ANSI ». Dans ce cas, codepage 1256.

codage de caractères ANSI permet de 217 caractères et ne contient pas de lettres arabes. Je pense que peut-être le fichier utilise un codage alternatif.

Anwsering votre édition, il semble que le problème est avec Notepad ++, parce que ce qui est affiché est clairement au-delà des capacités du charset ANSI.

premier i téléchargé votre fichier et essayé d'utiliser vim pour vérifier son encodage et il ne semblait pas savoir et sur une deuxième machine, il dit latin1 qui pourrait être similaire à ce qui est arrivé dans notepad ++ (a donné la réponse générique). < br> donc je l'ai fait file data.txt et la sortie était la suivante:

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

espérons que cette aide.

EDIT :
en utilisant la chose du navigateur a montré que cette réponse est incorrecte.

ISO-8859-4 et ISO-8859-13 pourrait afficher le texte, sans erreur, mais les personnages lorsqu'ils ne sont pas en arabe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top