Então qual é o problema,
É um caractere ’
( RIGHT SINGLE QUOTATION MARK
- U + 2019) que está sendo decodificado como CP-1252 em vez de UTF-8 . Se você verificar o codificações mesa, então você vê que este personagem está em UTF-8 composto por bytes 0xE2
, 0x80
e 0x99
. Se você verificar o layout da página de códigos CP-1252 , verá que cada um desses bytes representa os caracteres individuais â
, €
e ™
.
e como posso corrigir isso?
Use UTF-8 em vez de CP-1252 para ler, gravar, armazenar e exibir os caracteres.
Eu tenho o Tipo de conteúdo definido como UTF-8 na minha <head>
tag e nos meus cabeçalhos HTTP:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Isso instrui apenas o cliente que codificação usar para interpretar e exibir os caracteres. Isso não instrui seu próprio programa sobre qual codificação usar para ler, gravar, armazenar e exibir os caracteres. A resposta exata depende da plataforma do servidor / banco de dados / linguagem de programação usada. Observe que o conjunto no cabeçalho de resposta HTTP tem precedência sobre a metatag HTML. A metatag HTML só seria usada quando a página fosse aberta no sistema de arquivos do disco local, e não no HTTP.
Além disso, meu navegador está definido para Unicode (UTF-8)
:
Isso força apenas o cliente que codificação usar para interpretar e exibir os caracteres. Mas o problema real é que você já está enviando ’
(codificado em UTF-8) para o cliente em vez de ’
. O cliente está sendo exibido corretamente ’
usando a codificação UTF-8. Se o cliente foi mal instruído a usar, por exemplo, ISO-8859-1, você provavelmente já viu ââ¬â¢
.
Estou usando o ASP.NET 2.0 com um banco de dados.
Provavelmente, esse é o seu problema. Você precisa verificar com uma ferramenta de banco de dados independente a aparência dos dados.
Se o ’
personagem estiver lá, você não estará se conectando ao banco de dados corretamente. Você precisa informar ao conector do banco de dados para usar o UTF-8.
Se o seu banco de dados contém ’
, é o seu banco de dados que está bagunçado. Provavelmente as tabelas não estão configuradas para uso UTF-8
. Em vez disso, eles usam a codificação padrão do banco de dados, que varia dependendo da configuração. Se esse é o seu problema, geralmente apenas alterar a tabela para usar UTF-8 é suficiente. Se seu banco de dados não suportar isso, você precisará recriar as tabelas. É uma boa prática definir a codificação da tabela quando você a cria.
Você provavelmente está usando o SQL Server, mas aqui está um código MySQL (copiado deste artigo ):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
Se sua tabela já é UTF-8, você precisa dar um passo atrás. Quem ou o que colocou os dados lá. É aí que está o problema. Um exemplo seria os valores enviados pelo formulário HTML que foram codificados / decodificados incorretamente.
Aqui estão mais alguns links para saber mais sobre o problema: