Come affronti i problemi di decodifica?

0

Per quello che capisco, data una sequenza di byte senza ulteriori informazioni, non è generalmente possibile capire di quale codifica stiamo parlando. Ovviamente possiamo indovinare (ad esempio% per Encode::Guess e strumenti simili), ma a volte questo non è fattibile.

Nel mio caso, ho un array di byte che è \xe2\x80\xa1 , e posso dedurre dal contesto (come umano) che dovrebbe corrispondere a un carattere à ( \xc3\xa0 in UTF-8 ) o a á ( \xc3\xa1 in UTF-8 ). Viene da un xml che dichiara iso8859-1 nell'intestazione, ed è prodotto da uno strumento di terze parti, che è chiaramente rotto, ma devo affrontarlo. Come puoi immaginare, la decodifica fallisce, e non c'è fortuna con Encode::Guess .

Come affronteresti questo tipo di problema? So che non esiste un proiettile d'argento, ma esiste uno strumento che supera gli altri?

    
posta Dacav 11.05.2015 - 16:57
fonte

1 risposta

2

La codifica XML può essere complicata, perché alcuni generatori XML potrebbero codificare a macchina un tipo di contenuto generico come ISO-8859-1 anche se il documento contiene per es. UTF-8. Parte del motivo è che la maggior parte del testo è ASCII e l'ASCII valido (7 bit) è valido anche per la maggior parte delle altre codifiche. Gli sviluppatori potrebbero non capire la codifica dei caratteri o potrebbero non interessarsene (funziona con i miei dati di test!).

Un approccio generale è tentare di decodificare l'XML utilizzando il tipo di contenuto fornito. Come con l'HTML, questo si trova nella parte superiore del documento e non devono esserci caratteri non ASCII tra l'inizio del documento e questa codifica (eccetto per i segni di ordine dei byte che forniscono implicitamente un tipo di contenuto).

Se questa codifica non riesce, prova con uno o più tipi di contenuto predefiniti. I buoni candidati sono UTF-8, UTF-16 e ISO-8859-1. Anche le normali ASCII (7 bit) decodificano come UTF-8 e ISO-8859-1, quindi anche qui è implicito.

Tieni presente che, a seconda della lingua e dell'implementazione XML, potresti essere in grado di "attraversare" gli errori o meno: è meglio farlo fallire velocemente sugli errori in modo da sapere provare un'altra codifica.

Vedi anche

risposta data 11.05.2015 - 17:34
fonte

Leggi altre domande sui tag