Domanda

Ho un file che è codificato ANSI. Tuttavia si vede le lettere arabe all'interno di esso. Questo file di testo è stato generato da qualche programma (non ho informazioni), ma sembra che ci sia una sorta di codifica interna (se posso dire e se è possibile) per le lettere arabe per far apparire.

C'è una cosa simile? Se no, come può il file ANSI mostrare le lettere arabe?

* Se possibile spiegare in codice Java


Edizione 01

Quando si apre in Blocco note ++ indica che la codifica della pagina è ANSI. Si prega di verificare questa foto:

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


Edizione 02

è possibile controllare il file a da:

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

È stato utile?

Soluzione

Ho provato ad aprire il file in Firefox e Opera. Ho dovuto impostare la codifica dei caratteri per Windows arabo-1256 per ottenere che venga visualizzato correttamente in entrambi i browser, quindi la codifica del file è più probabile che sia così.

NOTA: Originariamente ho postato questo come un commento, ma è stato chiesto di rendere una risposta.

Altri suggerimenti

Come fai a sapere che è codificato ANSI? Se non è una codifica multi-byte come UTF-8, la mia ipotesi sarebbe che è codificato usando una tabella codici araba come questa: di Windows-1256 .

Si potrebbe guardare il file con un editor esadecimale e scoprire quali numeri i caratteri arabi hanno e in questo modo cercare di scoprire quale codifica / pagina di codice è stato creato con.

Risposta breve : Probabilmente, il file di testo non è "ANSI" -encoded, ma utf-8

.

Risposta lunga :

In primo luogo, il termine "ANSI" (su Windows) non significa una codifica fissa; il suo significato dipende dalle impostazioni della lingua. Per esempio, in Europa occidentale e Stati Uniti d'America, che di solito è di Windows-1252 (un variante ISO / IEC 8859-1, noto anche come latino-1 ), in Giappone, è Shift JIS , e nei paesi arabi, è ISO / IEC_8859-6

Se si utilizza una versione non-araba di Windows e tirare non è cambiato le impostazioni della lingua, e si può vedere le lettere arabe nel file quando lo si apre in Blocco note, allora non è certamente in una di queste codifiche ANSI. Invece, è probabilmente Unicode .

Si noti che non voglio dire "Unicode", che su Windows di solito significa UTF-16 . Potrebbe essere UTF-8 pure. Entrambi sono codifiche in grado di codificare tutti i caratteri 100.000+ attualmente definiti in Unicode, ma lo fanno in modi diversi. Entrambi sono codifiche lunghezza variabile , che significa che non tutti i caratteri sono codificati con lo stesso numero di bit.

In UTF-8, ogni carattere è codificato come una a quattro byte. La codifica è stato scelto in modo che i caratteri ASCII sono codificati in un byte.

In UTF-16, ogni carattere è codificata in due a quattro byte. Questa codifica è stato originariamente inventato quando Unicode aveva meno di 64K caratteri, e uno di conseguenza potrebbe codificare ogni personaggio in una sola parola a 16 bit. In seguito, quando divenne chiaro che Unicode dovrebbe crescere oltre il limite di 64 KB, uno schema è stato inventato in cui coppie di parole del gamma 0xD800-0xDFFF vengono utilizzati per rappresentare i caratteri al di fuori della prima 64K (meno 0x800) caratteri.

Per vedere cosa c'è in realtà il file, aprirlo in un editor esadecimale:

  • Se i primi due byte sono FF FE, allora è probabile che UTF-16 (little endian)
  • Se i primi due byte sono FF FE, allora è probabile che UTF-16BE (big endian, improbabile su Windows)
  • Se i primi tre byte sono EF BB BF, allora è probabile che UTF-8
  • Se si vede un sacco di 00 byte, è probabile UTF-16 (o UTF-32, se si vede le coppie di 00 bytes)
  • Se i caratteri arabi occupano un singolo byte, è probabile ISO-8859-6 (ad esempio ش sarebbe D5).
  • Se i caratteri arabi occupano più byte, è probabile UTF-8 (per esempio ش sarebbe D8 B4).
  

C'è una cosa simile?

No.

  

In caso contrario, come può il file ANSI mostrare le lettere arabe?

Non è un file codificato di Windows-ANSI. Più probabilmente, si utilizza un codifica larghezza variabile, molto probabilmente UTF-8: molte posizioni dei caratteri comuni a UTF-8 sono equivalenti alle loro posizioni in US-ASCII (infatti, è stato progettato in questo modo), e per deduzione anche per Windows-ANSI.

Modifica : Dobbiamo ringraziare Microsoft per questa confusione. “ANSI” non è ben specificato, quando si tratta di codifiche. Di solito è pensata per stare in piedi per la codifica di default di Windows con tabella codici 1252 ( “Windows-1252”), che sembra corrispondere ad alfabeti “occidentali” deriva dal latino.

Tuttavia, in altri paesi, la codifica di default usata da Windows (nelle versioni più vecchie di Windows ... oggi, il valore predefinito è UTF-8) è non di Windows-1252, ma piuttosto una codifica diversa, che è poi chiamato anche “ANSI”. In questo caso, tabella codici 1256.

ANSI codifica dei caratteri permette di 217 caratteri e non contiene lettere arabe. Penso che forse il file utilizza una codifica alternativa.

Anwsering tua modifica, sembra che il problema è con Notepad ++, perché ciò che viene visualizzato è chiaramente al di là delle capacità del set di caratteri ANSI.

Per prima cosa ho scaricato il file e ha cercato di usare vim per controllare la sua codifica e non sembrava conoscere e su una seconda macchina che ha detto latin1 che potrebbe essere simile a quello che è successo a Notepad ++ (ha dato la risposta generica). < br> così ho fatto file data.txt e l'uscita è stata questa:

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

Spero che questo aiuti.

Modifica :
usando la cosa del browser ha dimostrato che questa risposta non è corretta.

ISO-8859-4 e ISO-8859-13 potrebbero visualizzare il testo, senza errori, ma i personaggi in cui non è in arabo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top