Allora, qual'è il problema,
È un personaggio ’
( RIGHT SINGLE QUOTATION MARK
- U + 2019) che viene decodificato come CP-1252 anziché UTF-8 . Se si seleziona la codifiche tavolo, poi si vede che questo personaggio è in UTF-8, composto di byte 0xE2
, 0x80
e 0x99
. Se si controlla il layout di pagina di codice CP-1252 , poi vedrete che ognuno di questi byte si distinguono per i singoli caratteri â
, €
e ™
.
e come posso ripararlo?
Utilizzare UTF-8 invece di CP-1252 per leggere, scrivere, memorizzare e visualizzare i caratteri.
Ho Content-Type impostato su UTF-8 sia nel mio <head>
tag che nelle mie intestazioni HTTP:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Questo indica solo al client quale codifica utilizzare per interpretare e visualizzare i caratteri. Ciò non indica al proprio programma quale codifica utilizzare per leggere, scrivere, archiviare e visualizzare i caratteri. La risposta esatta dipende dalla piattaforma lato server / database / linguaggio di programmazione utilizzato. Si noti che quello impostato nell'intestazione della risposta HTTP ha la precedenza sul meta tag HTML. Il meta tag HTML verrebbe utilizzato solo quando la pagina viene aperta dal file system del disco locale anziché da HTTP.
Inoltre, il mio browser è impostato su Unicode (UTF-8)
:
Ciò impone solo al client quale codifica utilizzare per interpretare e visualizzare i caratteri. Ma il vero problema è che stai già inviando ’
(codificato in UTF-8) al client anziché ’
. Il client viene visualizzato correttamente ’
utilizzando la codifica UTF-8. Se il client fosse stato erroneamente utilizzato, ad esempio ISO-8859-1, probabilmente avresti visto ââ¬â¢
invece.
Sto usando ASP.NET 2.0 con un database.
Questo è molto probabilmente dove si trova il tuo problema. È necessario verificare con uno strumento di database indipendente l'aspetto dei dati.
Se il ’
personaggio è presente, non ti stai collegando correttamente al database. Devi dire al connettore del database di usare UTF-8.
Se il tuo database contiene ’
, allora è il tuo database ad essere incasinato. Molto probabilmente le tabelle non sono configurate per l'uso UTF-8
. Al contrario, utilizzano la codifica predefinita del database, che varia in base alla configurazione. Se questo è il tuo problema, in genere è sufficiente modificare la tabella per utilizzare UTF-8. Se il tuo database non lo supporta, dovrai ricreare le tabelle. È buona norma impostare la codifica della tabella quando la si crea.
Molto probabilmente stai usando SQL Server, ma ecco un po 'di codice MySQL (copiato da questo articolo ):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
Se il tuo tavolo è già UTF-8, allora devi fare un passo indietro. Chi o cosa ci ha messo i dati. Ecco dove si trova il problema. Un esempio potrebbe essere rappresentato dai valori inviati dai moduli HTML codificati / decodificati in modo errato.
Ecco alcuni altri collegamenti per saperne di più sul problema: