Quel est le problème ?
Il s'agit d'un ’
( RIGHT SINGLE QUOTATION MARK
- U+2019) qui est décodé en tant que CP-1252 au lieu de UTF-8 . Si vous vérifiez le encodages vous voyez que ce caractère est en UTF-8 composé d'octets 0xE2
, 0x80
y 0x99
. Si vous vérifiez le Mise en page du code CP-1252 Vous verrez alors que chacun de ces octets représente les caractères individuels â
, €
y ™
.
et comment puis-je y remédier ?
Utilisez UTF-8 au lieu de CP-1252 pour lire, écrire, stocker et afficher les caractères.
Le type de contenu (Content-Type) est défini sur UTF-8 dans mes deux fichiers <head>
et mes en-têtes HTTP :
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Il indique seulement au client le codage à utiliser pour interpréter et afficher les caractères. Cela n'indique pas à votre propre programme quel encodage utiliser pour lire, écrire, stocker et afficher les caractères. La réponse exacte dépend de la plate-forme du serveur, de la base de données et du langage de programmation utilisés. Il convient de noter que l'encodage défini dans l'en-tête de la réponse HTTP a la priorité sur la balise HTML meta. La métabalise HTML n'est utilisée que lorsque la page est ouverte à partir du système de fichiers du disque local plutôt qu'à partir du protocole HTTP.
En outre, mon navigateur est réglé sur Unicode (UTF-8)
:
Cela oblige seulement le client à choisir le codage à utiliser pour interpréter et afficher les caractères. Mais le problème réel est que vous envoyez déjà ’
(encodé en UTF-8) au client au lieu de ’
. Le client affiche correctement ’
en utilisant l'encodage UTF-8. Si l'on avait demandé au client d'utiliser, par exemple, ISO-8859-1, on aurait probablement vu ââ¬â¢
au lieu de cela.
J'utilise ASP.NET 2.0 avec une base de données.
C'est probablement là que se situe votre problème. Vous devez vérifier à l'aide d'un outil de base de données indépendant à quoi ressemblent les données.
Si le ’
est présent, vous ne vous connectez pas correctement à la base de données. Vous devez indiquer au connecteur de la base de données d'utiliser UTF-8.
Si votre base de données contient des ’
alors c'est votre base de données qui est défectueuse. Il est fort probable que les tables ne soient pas configurées pour utiliser UTF-8
. Au lieu de cela, ils utilisent l'encodage par défaut de la base de données, qui varie en fonction de la configuration. Si c'est le cas, il suffit généralement de modifier la table pour qu'elle utilise UTF-8. Si votre base de données ne le prend pas en charge, vous devrez recréer les tables. Une bonne pratique consiste à définir l'encodage de la table lorsque vous la créez.
Vous utilisez probablement SQL Server, mais voici un peu de code MySQL (copié de cet article ):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
Si votre tableau est cependant déjà en UTF-8, vous devez faire un pas en arrière. Qui ou ce que y placer les données. C'est où se situe le problème. Un exemple serait les valeurs soumises dans un formulaire HTML qui sont incorrectement encodées/décodées.
Voici quelques liens supplémentaires pour en savoir plus sur le problème :