Domanda

Ho un certo numero di siti web che sono in esecuzione il rendering caratteri non validi. meta-tag delle pagine specificano codifica UTF-8. Tuttavia, un certo numero di pagine contengono caratteri che non possono essere interpretati da UTF-8, probabilmente perché i file sono stati salvati con un'altra codifica (come ANSI). L'uno in particolare che mi preoccupa in questo momento è un apostrofo di fantasia (come in " Bob " ... scusate se che non si presenta in modo corretto). validatore di W3 indica l'entità è " \ x92 ", ma non convalidare il file perché non la mappa in Unicode. E, naturalmente, se apro il file in Notepad ++ e modificare la codifica UTF-8, il carattere viene sostituito da un 92 in una scatola nera.

Ecco la mia domanda: qual è il modo più semplice per risolvere questo problema? Devo aprire tutte le pagine e sostituire quel personaggio con un apostrofo convenzionale? O c'è una soluzione rapida potrei aggiungere (per esempio, a IIS) che potrebbe annullare o risolvere il problema di codifica? O devo forza bruta trova / sostituisci? Ho centinaia di pagine di questi siti e non ho idea di quanti di loro avrei dovuto cambiare, quindi se qualcuno conosce un modo ho potuto né aggirare questo problema o risolverlo rapidamente lo apprezzerei.

È stato utile?

Soluzione

Stai servendo le pagine come HTML dritto, o hai un altro script che servono il contenuto? Se si dispone di uno script che sta scontando il contenuto, che script potrebbe basta cercare qualsiasi istanza di \ x92 e sostituirlo con un apostrofo. In PHP questo sarebbe un semplice str_replace ()

Se stai servendo dritto HTML allora si dovrà modificare in realtà essi stessi i file. Questo può essere automatizzato, tuttavia (e probabilmente dovrebbe essere se si dispone di centinaia di file) a seconda di cosa gli strumenti che avete a disposizione a voi e quale sistema operativo si è in. Dal momento che lei ha detto che si sta utilizzando Notepad ++ suppongo che sia lecito ritenere siete in MS Windows (quindi non è divertente comandi Unix a cose di velocità in su)

E 'possibile creare uno script batch che può fare questo, però. Ci sono molto semplici strumenti di editing di testo ASCII incorporati nel prompt dei comandi. Se questo non è possibile, allora è molto possibile fare il programma ++ un C o C per fare questo se si dispone di un compilatore sul vostro sistema e la conoscenza moderata di C. Se si dispone il primo e non il secondo, chiedo e ti frusta un po ' fonte per voi.

Altri suggerimenti

Non sono sicuro circa la parte codifica di esso me stesso, ma se si finisce per dover fare per forza bruta, si può sempre scrivere un breve programma che consente di scorrere tutte le pagine web, carica ogni file in memoria , gestisce un regex.replace per risolvere il problema di carattere, e salva il file su disco. Ovviamente non è l'ideale, ma meglio che aprire ogni file sul proprio.

Buona fortuna

Ho appena incontrato un problema simile in cui alcuni spazi non rompere "xA0" ottenuto in un documento presumibilmente UTF-8. In Notepad ++ questi vengono visualizzati in una scatola nera con "xA0" scritto in esso. Tuttavia Notepad ++ non permette loro di essere copiati o incollati.

Ho fatto una piccola ricerca e ho scoperto cosa sta succedendo. Un editor esadecimale rivela che questi vengono codificati come un singolo byte: "A0" che è valido UTF-8. Nulla non ASCII dovrebbe essere almeno due byte, quindi la codifica corretta è "C2 A0" in esadecimale.

Per il vostro esempio apostrofo fantasia, avete a che fare con la stessa cosa. In realtà, però, il problema è più complicato perché in caratteri ASCII estesi \ x92 (decimale 146) è un apostrofo, ma in unicode \ x92 è un carattere di controllo e il diritto singola citazione dovrebbe essere U + 2019 (decimale 8217). L'aggiunta di questo simbolo in notepad ++ (tramite Edit-> pannello Carattere) e di ispezione in un editor esadecimale rivela che la codifica esadecimale corretto è "E2 80 99" che in binario è 1110 0010 10 000000 10 011001 . Quando si rimuovono i byte UTF-8 di controllo (non grassetto) Questo produce 0010 0000 0000 0001 1001 che è pari ad un valore decimale di 8217.

Il modo corretto di gestire questo sarebbe quello di aprire il file come un flusso di byte (unsigned char * in C) e la ricerca di improprie UTF-8 sequenze. Quindi è possibile sostituirli con (vedi https://en.wikipedia.org/wiki / UTF-8 # Invalid_byte_sequences ) oppure si può cercare di gestire su misura loro, facendo le sostituzioni come A0 -> C2 A0 (impropriamente codificato spazio unificatore) e 92 -> E2 80 99 (impropriamente codificato segno di destra singola citazione ).

Tutte le charcters speciali devono essere codificati HTML, per esempio un simbolo di copyright dovrebbe essere nel vostro HTML come

©
Lista entità

HTML:

http://www.w3schools.com/HTML/html_entities.asp

Per quanto riguarda come si implementa questo dipende in gran parte da come si sta creando il codice, in primo luogo, ma qualcosa di simile ASP.Net avrà funzioni lato server come:

Server.HTMLEncode("string with special chars")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top