Domanda

Sto cercando di ottenere qualche codice legacy per visualizzare i caratteri cinesi correttamente. Un carattere codifica Sto cercando di lavorare con inizia con un 0x7F ed è lunga 4 byte (compreso il byte 0x7F). Qualcuno sa che tipo di codifica questo è e dove posso trovare le informazioni per esso? Grazie ..

UPDATE: Ho anche dovuto lavorare con una certa codifica giapponese che inizia ogni personaggio con un 0xE3 ed è lungo tre byte. Esso mostra sul mio computer correttamente se scelgo l'impostazione internazionale giapponese in Windows, tuttavia, non vengono visualizzati correttamente nella nostra applicazione. Tuttavia, se si seleziona qualsiasi altro locale diverso da quello giapponese, non riesco nemmeno a vedere i nomi dei file in modo corretto. Così sto indovinando questa codifica non è Unicode. Qualcuno sa di cosa si tratta? E 'ANSI? E 'Shift JIS?

Per quello cinese, ho provato con Unicode e caratteri e sto ottenendo lo stesso schema-8 UTF; 0x7F seguito da tre byte. Sono Unicode e UTF-8 lo stesso?

È stato utile?

Soluzione

  

Una codifica dei caratteri che sto cercando di lavorare con inizia con un 0x7F ed è lunga 4 byte

Quali sono gli altri byte? Avete qualche testo latino in questa codifica?

Se è “0x7f 0x ... 0x00 0x00” si sta cercando in UTF-32LE. Potrebbe anche essere a due UTF-16 (sia LE o BE) caratteri.

La maggior parte dell'Est asiatico codifiche usano 0x80-0xff come byte di piombo per i caratteri non ASCII; non c'è nessuno che conosco che userebbe un 0x7F di primo piano come qualcosa di diverso da un ASCII delete.

ETA:

  

si suppone che ci sia Byte Order Marks?

Non ci ha bisogno di essere una distinta base, se c'è un modo out-of-band di segnalazione che la codifica è ‘UTF-32LE’ (possibilmente uno che si perde prima che arrivi a voi).

  

Ho anche dovuto lavorare con una certa codifica giapponese che inizia ogni personaggio con un 0xE3 ed è lungo tre byte.

Questo è sicuramente UTF-8. Sequenza 0xE3 0x ... 0x ... si tradurrebbe in un carattere tra U + 3000 e U + 4000, che è dove l'hiragana / katakana dal vivo.

  

Esso mostra sul mio computer correttamente se scelgo l'impostazione internazionale giapponese in Windows, tuttavia, non vengono visualizzati correttamente nella nostra applicazione.

allora è probabile che la vostra applicazione è è uno dei orda deprecabile di applicazioni non Unicode-compliant, ancora utilizzando (*) le versioni delle interfacce Win32 all'interno dei ‘quelli W'-suffisso‘A’. Sia che si può leggere nella stringa in base alla sua codifica reale è discutibile:. Un'applicazione non Unicode conforme sarà mai in grado di visualizzare un ideogramma dell'Asia orientale in un locale occidentale

(*:.. Che prende il nome “ANSI”, che è il termine fuorviante di Windows per “qualunque sia la tabella di codici di sistema è impostato in questo momento” Ecco perché cambiare il locale interessato esso)

ETA (2):

OK, incrinato esso. Non è alcuna codifica standardizzata che ho incontrato prima, ma è relativamente facile da decifrare se si assume la premessa che i punti di codice Unicode vengono codificati.

0x00-0x7E: plain ASCII
0x7F A B C: Unicode character

Il carattere codificato in una fuga Unicode può essere calcolato prendendo l'indice in una stringa chiave di A, B e C e addizionando:

A*0x1000 + B*0x40 + C

Cioè, si tratta di un set di caratteri in base 64, ma non è il solito standard Base64. Un po 'di sperimentazione dà una stringa chiave di:

.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

Il ‘’ e ‘_’ personaggi sono congetture, dal momento che nessuno dei personaggi hai postato li usa. Avremmo bisogno di più dati per scoprire la stringa esatta.

Quindi, per esempio:

0x7F 3 u g
A=4 B=58 C=44
4*0x1000 + 58*0x40 + 44 = 0x4EAC
U+4EAC = 京

ETA (3):

Si, dovrebbe essere facile per creare una stringa Unicode nativo da succhiare fuori ogni punto manualmente il codice e l'adesione come un personaggio. Non abbastanza sicuro ciò che è disponibile su qualsiasi piattaforma che si sta utilizzando, ma qualsiasi piattaforma Unicode-capable dovrebbe essere in grado di fare una stringa da codepoints semplice (e, si spera, senza dover ricodificare manualmente per UTF-16 byte).

ho pensato che deve essere codepoints Unicode notando che i tre caratteri esempio avevano prima sfuggire-caratteri nella stessa gamma generale, e nello stesso ordine numerico come loro codepoints Unicode. Gli altri due personaggi sembravano cambiare in modo casuale, quindi era molto probabilmente un big-endian codifica del punto di codice, e, probabilmente, una codifica base-64 come 6 è il numero di bit, come si può uscire da ASCII leggibile.

standard Base64 si inizia con le lettere, che avrebbe messo qualcosa di iniziare con un numero troppo in alto per essere nel Basic Multilingual Plane. Così ho iniziato a indovinare con ‘0123456789ABCDEFG ...’, che sarebbe l'altra scelta evidente di stringa chiave. Che ha ottenuto con conseguente numeri che erano vicino ai punti di codice per i caratteri dati, ma un po 'troppo basso. Inserimento di un carattere aggiuntivo all'inizio della stringa chiave (modo che la cifra ‘0’ non mappare il numero 0) ottenuto uno dei personaggi di destra e gli altri due molto vicino; quello che è stato giusto non aveva lettere minuscole, in modo da cambiare solole lettere minuscole sono inseriti altro personaggio tra i casi superiori e inferiori. Questo si avvicinò con i numeri giusti.

Non è garantito che questo è in realtà a destra, ma (a parte la scelta arbitraria di caratteri inseriti) è molto probabile che sia.

Altri suggerimenti

Si potrebbe desiderare di guardare codifica dei caratteri cinese pagina su Wikipedia. L'unica codifica in là che posso vedere che è sempre 4 byte è UTF-32 .

GB 18030 è l'attuale set di caratteri cinesi standard, ma può essere da 1 a 4 byte.

chardet . Si fa un buon lavoro di indovinare la codifica dei caratteri di una stringa di byte.

  

sono Unicode e UTF-8 lo stesso?

No. UTF-8 è solo un modo per rappresentare i caratteri Unicode come una sequenza di byte. Unicode è lo standard completo, l'assegnazione di identificatori numerici e umano-leggibili ad ogni personaggio, così come un sacco di metadati sui personaggi.

Potrebbe essere una codifica unicode valido, ad esempio una coppia di surrogati utf-8 o UTF16.

Sì, quello cinese è UTF-8, un'implementazione (codifica) di Unicode. L'UTF-8 è lungo 1 byte per i caratteri ASCII e fino a 4 byte per gli altri.

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