Dove posso trovare un UTF8 bit a tavola char per convertire per esempio “Ã ±” in “n”?

StackOverflow https://stackoverflow.com/questions/3920432

Domanda

Sono stato a guardare a fondo attraverso il Web e io non riesco a trovare un tavolo con questo tipo di conversioni. Quelli che trovare avere alcuni errori e non sono troppo affidabili, così ho cercato un po 'tavolo della giuria o simili, ma purtroppo non ho .. quindi eccomi qui ..

Come accennato nel titolo, quello che voglio fare è, ad esempio, sa cosa fa "Ã ±" stand per (questa l'ho già so .. "N"), ma non solo per i personaggi spagnoli, ma altri ( so già quelli polacchi).

Il problema principale è che ho una stringa in PHP che a volte può venire come per esempio "Eñe" (che è ok) e altri come "EA ± e" .. e nel lattest dovrei essere in grado di cambiare in " Eñe" in modo che sia leggibile .. ma se è ok non voglio cambiarlo. Per fare questo, stavo usando la funzione utf8_decode, ma nel caso in cui la stringa è leggibile, sarà ancora cambiare la "N" a "s" (ma bianco) .. quindi è per questo che non posso sempre decodificare la stringa, e se uso la funzione mb_detect_encoding, sarò sempre ottengo "UTF-8" come una risposta .. e non è quindi disponibile ..

Una volta che so tutti i caratteri bit utf8 scritte come per esempio "à ±" per "N", "Ź" per "Z", ecc, ho intenzione di fare una funzione che sarà essenzialmente sostituire uno all'altro. ., che è una sorta della stessa cosa che l'utf8_decode fa .. a meno che qualcuno qui ha una soluzione migliore!

Grazie in anticipo! Saluti!

È stato utile?

Soluzione

Perché vuoi fare questo? Vuoi recuperare i dati danneggiati o giù di lì?

Si davvero non può essere fatto come parte del consueto flusso di codice di business. Tutto quello che dovete fare è quello di garantire che tutti gli strati della vostra webapp sta usando UTF-8 correttamente. La sorgente PHP, l'intestazione della risposta HTTP e del corpo, la tabella DB, la connessione DB, eccetera. Vedi anche PHP UTF-8 bigino .

Se effettivamente vuole fare questo come un compito di una volta per recuperare i dati danneggiati, quindi è bene sapere che i dati danneggiati nella tua domanda indica i dati UTF-8, che è stato erroneamente archiviati o visualizzato come ISO-8859-1. Hai solo bisogno di leggere i dati come ISO-8859-1 e scrivere come UTF-8. Una volta. Poi farlo nel modo giusto.

A testimonianza, il ñ ( caratteri Unicode 'alfabeto latino N con tilde'(U + 00F1) ) esiste in Unicode ( UTF-8 , una codifica multi-byte) di byte 0xC3 e 0xB1. Quando quei byte sono codificati utilizzando una codifica a singolo byte come ISO-8859-1, allora il 0xC3 diventa à e 0xB1 diventa ±. Si veda anche la ISO-8859-1 tabella codici di layout .

Altri suggerimenti

Il problema è che una volta che hai mojibake , non c'è c'è modo affidabile per riconvertirlo in quello che doveva significare. Vedere presente paragrafo a Wikipedia per una spiegazione del problema:

  

Si consideri un file di testo contenente la parola tedesca für nella codifica ISO-8859-1. Questo file è ora aperto con un editor di testo che presuppone l'ingresso è UTF-8. Come il primo byte (0x66) è compreso nell'intervallo 0x00-0x7F, UTF-8 interpreta correttamente come un f. Il secondo byte (0xFC) non è un valore valido per l'inizio di ogni UTF-8 caratteri codificati. Un editor di testo potrebbe quindi sostituire il byte con il simbolo carattere di sostituzione per avvertire l'utente che qualcosa è andato storto. L'ultimo byte (0x72) è compreso nell'intervallo codice 0x00-0x7F e può essere decodificato correttamente. L'intera stringa viene ora visualizzato come questo:. f�r

     

Un editor di testo scarsamente implementata potrebbe salvare la sostituzione in UTF-8 forma; i dati del file di testo sarà quindi simile a questa: 0x66 0xEF 0xBF 0xBD 0x72, che verrà visualizzato nella norma ISO-8859-1 nuovo come f�r. La sostituzione distrugge anche il byte originale, rendendo impossibile per recuperare ciò che personaggio è stato destinato.

È necessario evitare in modo non corretto il testo interpretare usando la codifica sbagliata fin dall'inizio. Fissaggio quando si è rotto è troppo tardi.

Il tuo problema è un problema di interpretazione più di transcodifica. In qualsiasi computer moderno, N è normalmente ingresso come 0xc3b1 binario, in quanto è il suo codice UTF-8. Se si interpreta che (senza transcodifica) nel vecchio codice ISO-LATIN-15, si otterrà 0xc3 = a seguito da 0xB1 = ±. Questo è il motivo per cui non c'è un "tavolo":. Si tratta di un problema di visualizzazione

La cosa migliore da fare è evitare di iso-latin del tutto. Ciò causerà un sacco di problemi. Il vero modo per risolvere il tuo programma è:. Utilizzare solo utf-8 in tutto il mondo, che vi farà risparmiare un sacco di tempo e mal di testa

Nel frattempo, se si vuole veramente andare a prendere l'iso-latin-15 stringa equivalente al vostro ingresso utf-8 (che non lo fai, se hai il alto a destra), è possibile passare la stringa a qualsiasi codice converter, chiedendo per convertire utf-8 a ISO-LATIN-15 . Una cosa che si dovrebbe fare attenzione è a doppia transcodifica. Se tu avessi una stringa UTF-8 e mistakingly chiesto una conversione da iso-Lating-15 a UTF-8, allora avete ottenuto una stringa UTF-8 che in realtà la dice ±, che è 0xc383c2b1 binario. Per recuperare la stringa UTF-8 corretto, l'anwser è lo stesso: chiedere di convertire la stringa straziati da UTF-8 a iso-latin-15, che sarà lieto di prendere 0xc383 e convertirlo in 0xc3, quindi 0xc2b1 e convertirlo in 0xB1, dando una stringa corretta UTF-8 contenente una corretta ñ.

Specialmente per PHP e le applicazioni web, ricordare che molti dei computer (e sempre più in futuro) vi invierà utf-8 di default.

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