Entonces, cuál es el problema,
Es un personaje ’
( RIGHT SINGLE QUOTATION MARK
- U + 2019) que se decodifica como CP-1252 en lugar de UTF-8 . Si verifica la tabla de codificaciones , verá que este carácter está en UTF-8 compuesto de bytes 0xE2
, 0x80
y 0x99
. Si verifica el diseño de la página de códigos CP-1252 , verá que cada uno de esos bytes representa los caracteres individuales â
, €
y ™
.
y como puedo arreglarlo?
Use UTF-8 en lugar de CP-1252 para leer, escribir, almacenar y mostrar los caracteres.
Tengo el tipo de contenido establecido en UTF-8 tanto en mi <head>
etiqueta como en mis encabezados HTTP:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Esto solo le indica al cliente qué codificación usar para interpretar y mostrar los caracteres. Esto no le indica a su propio programa qué codificación usar para leer, escribir, almacenar y mostrar los caracteres. La respuesta exacta depende de la plataforma del servidor / base de datos / lenguaje de programación utilizado. Tenga en cuenta que el conjunto en el encabezado de respuesta HTTP tiene prioridad sobre la metaetiqueta HTML. La metaetiqueta HTML solo se usaría cuando la página se abra desde el sistema de archivos del disco local en lugar de desde HTTP.
Además, mi navegador está configurado para Unicode (UTF-8)
:
Esto solo obliga al cliente a utilizar la codificación para interpretar y mostrar los caracteres. Pero el problema real es que ya está enviando ’
(codificado en UTF-8) al cliente en lugar de ’
. El cliente se muestra correctamente ’
utilizando la codificación UTF-8. Si el cliente recibió instrucciones erróneas para usar, por ejemplo, ISO-8859-1, es probable que haya visto en su ââ¬â¢
lugar.
Estoy usando ASP.NET 2.0 con una base de datos.
Es muy probable que este sea el problema. Debe verificar con una herramienta de base de datos independiente cómo se ven los datos.
Si el ’
personaje está allí, entonces no se está conectando a la base de datos correctamente. Debe indicarle al conector de la base de datos que use UTF-8.
Si su base de datos contiene ’
, entonces es su base de datos la que está en mal estado. Lo más probable es que las tablas no estén configuradas para usar UTF-8
. En cambio, utilizan la codificación predeterminada de la base de datos, que varía según la configuración. Si este es su problema, por lo general, basta con alterar la tabla para usar UTF-8. Si su base de datos no lo admite, deberá volver a crear las tablas. Es una buena práctica establecer la codificación de la tabla cuando la cree.
Lo más probable es que estés usando SQL Server, pero aquí hay un código MySQL (copiado de este artículo ):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
Sin embargo, si su mesa ya es UTF-8, debe retroceder un paso. Quién o qué puso los datos allí. Ahí es donde está el problema. Un ejemplo serían los valores enviados por formulario HTML que están codificados / decodificados incorrectamente.
Aquí hay algunos enlaces más para aprender más sobre el problema: