Domanda

Ho un file di testo codificato ANSI che non avrebbe dovuto essere codificato come ANSI dato che c'erano caratteri che ANSI non supporta. Preferirei lavorare con UTF-8.

I dati possono essere decodificati correttamente o sono persi durante la transcodifica?

Quali strumenti posso usare?

Ecco un esempio di ciò che ho:

ç é

Posso dire dal contesto (caf & # 195; & # 169; dovrebbe essere caf & # 233;) che questi dovrebbero essere questi due personaggi:

ç é
È stato utile?

Soluzione

EDIT: una semplice possibilità da eliminare prima di entrare in soluzioni più complicate: hai provato a impostare il set di caratteri su utf8 nell'editor di testo in cui stai leggendo il file? Questo potrebbe essere solo il caso in cui qualcuno ti invii un file utf8 che stai leggendo in un editor impostato per dire cp1252.

Solo prendendo i due esempi, questo è un caso di utf8 che viene letto attraverso l'obiettivo di una codifica a byte singolo, probabilmente uno di iso-8859-1, iso-8859-15 o cp1252. Se puoi pubblicare esempi di altri caratteri problematici, dovrebbe essere possibile restringerlo ulteriormente.

Poiché l'ispezione visiva dei personaggi può essere fuorviante, dovrai anche esaminare i byte sottostanti: il & # 167; vedi sullo schermo potrebbe essere 0xa7 o 0xc2a7 e questo determinerà il tipo di conversione del set di caratteri che devi fare.

Puoi presumere che tutti i tuoi dati siano stati distorti esattamente nello stesso modo - che provengano dalla stessa fonte e abbiano attraversato la stessa sequenza di trasformazioni, in modo che ad esempio non ci sia un singolo & # 233; nel tuo testo, è sempre & # 195; & # 167 ;? In tal caso, il problema può essere risolto con una sequenza di conversioni di set di caratteri. Se puoi essere più specifico sull'ambiente in cui ti trovi e sul database che stai utilizzando, qualcuno qui può probabilmente dirti come eseguire la conversione appropriata.

Altrimenti, se i caratteri problematici si verificano solo in alcuni punti dei tuoi dati, dovrai prenderli istanza per istanza, sulla base di ipotesi secondo le linee di "nessun autore che intendesse inserire & # 195; & # 167; nel loro testo, quindi ogni volta che lo vedi, sostituiscilo con & # 231; " ;. Quest'ultima opzione è più rischiosa, in primo luogo perché quei presupposti sulle intenzioni degli autori potrebbero essere sbagliati, in secondo luogo perché dovrete individuare da soli ogni carattere problematico, il che potrebbe essere impossibile se c'è troppo testo da ispezionare visivamente o se è scritto in una lingua o in un sistema di scrittura che ti è estraneo.

Altri suggerimenti

Segui questi passaggi con Notepad ++

1- Copia il testo originale

2- In Notepad ++, apri un nuovo file, modifica la codifica - > scegli una codifica che ritieni segua il testo originale. Prova anche la codifica " ANSI " poiché a volte i file Unicode vengono letti come ANSI da determinati programmi

3- Incolla

4- Quindi convertire in Unicode andando di nuovo sullo stesso menu: Codifica - > " Codifica in UTF-8 " (Non " Converti in UTF-8 ") e si spera che diventerà leggibile

I passaggi precedenti si applicano per la maggior parte delle lingue. Devi solo indovinare la codifica originale prima di incollare in notepad ++, quindi convertire lo stesso menu in una codifica alternativa basata su Unicode per vedere se le cose diventano leggibili.

La maggior parte delle lingue esiste in 2 forme di codifica: 1- La vecchia forma ANSI (ASCII) legacy, solo 8 bit, era inizialmente utilizzata dalla maggior parte dei computer. 8 bit consentivano solo 256 possibilità, 128 delle quali in cui i caratteri latini e di controllo regolari, gli ultimi 128 bit venivano letti in modo diverso a seconda delle impostazioni della lingua del PC 2- Il nuovo standard Unicode (fino a 32 bit) fornisce un codice univoco per ogni carattere in tutte le lingue attualmente conosciute e molte altre a venire. se un file è Unicode, dovrebbe essere compreso su qualsiasi PC con il carattere della lingua installato. Si noti che anche UTF-8 sale a 32 bit ed è largo solo come UTF-16 e UTF-32 e cerca di rimanere a 8 bit con caratteri latini solo per risparmiare spazio su disco

Quando vedi sequenze di caratteri come ç e à ©, di solito è un'indicazione che un file UTF-8 è stato aperto da un programma che lo legge come ANSI (o simile). Caratteri Unicode come questi:

U + 00C2 lettera maiuscola latina A con accento circonflesso
U + 00C3 maiuscola latina A con tilde
U + 0082 Pausa consentita qui
U + 0083 Nessuna pausa qui

tendono ad apparire nel testo ANSI a causa della strategia a byte variabile utilizzata da UTF-8. Questa strategia è spiegata molto bene qui .

Il vantaggio per te è che l'aspetto di questi strani caratteri rende relativamente facile trovare e quindi sostituire istanze di conversione errata.

Credo che, poiché ANSI utilizza sempre 1 byte per carattere, è possibile gestire questa situazione con una semplice operazione di ricerca e sostituzione. O più convenientemente, con un programma che include una mappatura della tabella tra le sequenze offensive e i caratteri desiderati, come questi:

â € œ - > “# Dovrebbe essere una doppia citazione riccia di apertura
â €? - > "# Dovrebbe essere una virgoletta doppia di chiusura

Qualsiasi dato testo, supponendo che sia in inglese, avrà un numero relativamente piccolo di diversi tipi di sostituzioni.

Spero che sia d'aiuto.

Con vim dalla riga di comando:

vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename

Nell'editor di testo sublime, file - > riaprire con la codifica - > scegli la codifica corretta.

Generalmente, la codifica viene rilevata automaticamente, ma in caso contrario è possibile utilizzare il metodo sopra.

Se vedi dei punti interrogativi nel file o se gli accenti sono già persi, tornare a utf8 non aiuterà la tua causa. per esempio. se café diventa cafe - cambiare la codifica da sola non aiuta (e avrai bisogno di dati originali).

Puoi incollare del testo qui, questo ci aiuterà a rispondere di sicuro.

E poi c'è il programma di ricodifica un po 'più vecchio.

Esistono programmi che tentano di rilevare la codifica di un file come chardet . Quindi è possibile convertirlo in una codifica diversa utilizzando iconv. Ma ciò richiede che il testo originale sia ancora intatto e che nessuna informazione venga persa (ad esempio rimuovendo gli accenti o le lettere intere accentate).

Ho trovato un modo semplice per rilevare automaticamente le codifiche dei file: cambiare il file in un file di testo (su un Mac rinominare l'estensione del file in .txt) e trascinarlo in una finestra di Mozilla Firefox (o File - > Open) . Firefox rileverà la codifica - puoi vedere cosa ne è uscito sotto Visualizza - > Codifica caratteri.

Ho cambiato la codifica del mio file usando TextMate dopo aver appreso la codifica corretta. File - > Riapri usando la codifica e scegli la tua codifica. Quindi File - > Salva con nome e modifica la codifica in UTF-8 e le terminazioni di riga in LF (o qualunque cosa tu voglia)

Su OS X Synalyze It! ti consente di visualizzare parti del tuo file in diverse codifiche (tutte supportate da la libreria ICU). Una volta che sai qual è la codifica di origine, puoi copiare l'intero file (byte) tramite gli appunti e inserirlo in un nuovo documento in cui è selezionata la codifica di destinazione (UTF-8 o qualunque cosa ti piaccia).

Molto utile quando si lavora con UTF-8 o altre rappresentazioni Unicode è UnicodeChecker

Ho trovato questa domanda durante la ricerca di una soluzione a un problema di code page che avevo con i caratteri cinesi, ma alla fine il mio problema era solo un problema con Windows che non li visualizzava correttamente nell'interfaccia utente.

Nel caso in cui qualcun altro abbia lo stesso problema, puoi risolverlo semplicemente cambiando il locale in Windows in Cina e poi di nuovo.

Ho trovato la soluzione qui:

http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/how-can-i-get-chinesejapanese-characters- ? a / fdb1f1da-b868-40d1-a4a4-7acadff4aafa page = 2 & amp; auth = 1

Anche la risposta di Gabriel è stata annullata dal fatto che guardare i dati in notepad ++ è stato ciò che mi ha fatto perdere di vista su Windows.

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