Pregunta

’ se muestra en mi página en lugar de '.

Tengo Content-Type ajustado a UTF-8 en ambos <head> Etiqueta y mis encabezados HTTP:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

enter image description here

Además, mi navegador está configurado para Unicode (UTF-8):

enter image description here

Entonces, ¿cuál es el problema y cómo puedo solucionarlo?

¿Fue útil?

Solución

Asegúrese de que el navegador y el editor estén utilizando la codificación UTF-8 en lugar de ISO-8859-1/Windows-1252.

O usar &rsquo;.

Otros consejos

Entonces, cuál es el problema,

Es un (RIGHT SINGLE QUOTATION MARK - U+2019) personaje que ha sido codificado como CP-1252 en vez de UTF-8. Si revisa el codificaciones tabla, entonces ves que este personaje está en UTF-8 compuesto por bytes 0xE2, 0x80 y 0x99. Si revisa el Diseño de la página del código CP-1252, entonces verás que cada uno de esos bytes representa a los caracteres individuales â, y .


¿Y cómo 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 en ambos <head> Etiqueta y mis encabezados HTTP:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Esto solo instruye al cliente que codifica usar para interpretar y mostrar los caracteres. Esto no instruye a su propio programa que codifica usar para leer, escribir, almacenar y mostrar los caracteres. La respuesta exacta depende de la plataforma / base de datos del lado del servidor / lenguaje de programación utilizado. Tenga en cuenta que el conjunto en el encabezado de respuesta HTTP tiene precedencia sobre la meta etiqueta HTML. La meta etiqueta HTML solo se usaría cuando la página se abre desde el sistema de archivos de disco local en lugar de desde HTTP.


Además, mi navegador está configurado para Unicode (UTF-8):

Esto solo obliga al cliente que codifica usar para interpretar y mostrar los caracteres. Pero el problema real es que ya estás enviando ’ (codificado en UTF-8) al cliente en lugar de . El cliente se muestra correctamente ’ Usando la codificación UTF-8. Si el cliente fuera ininterrumpido para usar, por ejemplo ISO-8859-1, probablemente habría visto ââ¬â¢ en cambio.


Estoy usando ASP.NET 2.0 con una base de datos.

Es muy probable que su problema se encuentre. Debe verificar con una herramienta de base de datos independiente cómo se ven los datos.

Si el El carácter está ahí, entonces no te estás conectando a la base de datos correctamente. Debe decirle 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, usan la codificación predeterminada de la base de datos, que varía según la configuración. Si este es su problema, entonces generalmente alterar la tabla para usar UTF-8 es suficiente. Si su base de datos no es compatible con eso, deberá recrear las tablas. Es una buena práctica establecer la codificación de la tabla cuando la crea.

Lo más probable es que esté usando SQL Server, pero aquí hay algunos 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 está UTF-8, entonces debe dar un paso atrás. Quién o qué Pon los datos allí. Ese es donde está el problema. Un ejemplo sería los valores enviados por el formulario HTML que están incorrectamente codificados/decodificados.


Aquí hay algunos enlaces más para obtener más información sobre el problema:

Tengo algunos documentos donde se mostraba como … y ê se mostraba como ê. Así es como llegó allí (código de python):

# Adam edits original file using windows-1252
windows = '\x85\xea' 
# that is HORIZONTAL ELLIPSIS, LATIN SMALL LETTER E WITH CIRCUMFLEX

# Beth reads it correctly as windows-1252 and writes it as utf-8
utf8 = windows.decode("windows-1252").encode("utf-8")
print(utf8)

# Charlie reads it *incorrectly* as windows-1252 writes a twingled utf-8 version
twingled = utf8.decode("windows-1252").encode("utf-8")
print(twingled)

# detwingle by reading as utf-8 and writing as windows-1252 (it's really utf-8)
detwingled = twingled.decode("utf-8").encode("windows-1252")

assert utf8==detwingled

Para solucionar el problema, utilicé el código Python como este:

with open("dirty.html","rb") as f:
    dt = f.read()
ct = dt.decode("utf8").encode("windows-1252")
with open("clean.html","wb") as g:
    g.write(ct)

(Debido a que alguien había insertado la versión de twingled en un documento UTF-8 correcto, en realidad tuve que extraer solo la parte atascada, detenerla e inserte nuevamente. Usé Beautifulsoup para esto).

Es mucho más probable que tenga un Charlie en la creación de contenido que que la configuración del servidor web sea incorrecta. También puede obligar a su navegador web a anular la página seleccionando la codificación de Windows-1252 para un documento UTF-8. Su navegador web no puede detener el documento que Charlie guardó.

Nota: El mismo problema puede ocurrir con cualquier otra página de código de byte (por ejemplo, Latin-1) en lugar de Windows-1252.

(Unicode CodePoint U+2019 RIGHT SINGLE QUOTATION MARK) está codificado en UTF-8 como bytes:

0xE2 0x80 0x99.

’ (Unicode CodePoints U+00E2 U+20AC U+2122) está codificado en UTF-8 como bytes:

0xC3 0xA2   0xE2 0x82 0xAC   0xE2 0x84 0xA2.

Estos son los bytes que su navegador realmente está recibiendo para producir ’ Cuando se procesa como UTF-8.

Eso significa que sus datos de origen están pasando dos conversiones de charset antes de ser enviado al navegador:

  1. La fuente personaje (U+2019) se codifica primero como UTF-8 bytes:

    0xE2 0x80 0x99

  2. Esos bytes individuales estaban siendo entonces mal interpretado y decodificado a unicode CodePoints U+00E2 U+20AC U+2122 por uno de los Windows-125X Charsets (1252, 1254, 1256 y 1258 Todos los mapas 0xE2 0x80 0x99 a U+00E2 U+20AC U+2122), y luego esos puntos de código se están codificando como UTF-8 bytes:

    0xE2 -> U+00E2 -> 0xC3 0xA2
    0x80 -> U+20AC -> 0xE2 0x82 0xAC
    0x99 -> U+2122 -> 0xE2 0x84 0xA2

Debe encontrar dónde se realiza la conversión adicional en el paso 2 y eliminarla.

Tienes un desajuste en la codificación de tu personaje; Su cadena está codificada en una codificación (UTF-8) y lo que esté interpretando esta página es usar otra (digamos ASCII).

Siempre especifique su codificación en sus encabezados HTTP y asegúrese de que esto coincida con la definición de codificación de su marco.

Ejemplo de encabezado HTTP:

Content-Type    text/html; charset=utf-8

Configuración de codificación en ASP.NET

<configuration>
  <system.web>
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
  </system.web>
</configuration>

Configuración de codificación en JSP

Esto a veces sucede cuando se convierte una cadena Desde Windows-1252 a UTF-8 dos veces.

Tuvimos esto en una aplicación Zend/PHP/MySQL donde caracteres como ese aparecían en la base de datos, probablemente debido a que la conexión MySQL no especifica el conjunto de caracteres correcto. Tuvimos que:

  1. Asegúrese de que Zend y PHP se comuniquen con la base de datos en UTF-8 (fue no por defecto)

  2. Repare los personajes rotos con varias consultas SQL como esta ...

    UPDATE MyTable SET 
    MyField1 = CONVERT(CAST(CONVERT(MyField1 USING latin1) AS BINARY) USING utf8),
    MyField2 = CONVERT(CAST(CONVERT(MyField2 USING latin1) AS BINARY) USING utf8);
    

    Haga esto para tantas tablas/columnas como sea necesario.

También puede arreglar algunas de estas cadenas en PHP si es necesario. Tenga en cuenta que porque los caracteres han sido codificados dos veces, en realidad necesitamos hacer una conversión inversa de UTF-8 Volver a Windows-1252, que al principio me confundió.

mb_convert_encoding('’', 'Windows-1252', 'UTF-8');    // returns ’

Si su tipo de contenido ya es UTF8, entonces es probable que los datos ya lleguen en la codificación incorrecta. Si obtiene los datos de una base de datos, asegúrese de que la conexión de la base de datos use UTF-8.

Si se trata de datos de un archivo, asegúrese de que el archivo esté codificado correctamente como UTF-8. Por lo general, puede configurar esto en el diálogo "Guardar como ..." del editor de su elección.

Si los datos ya están rotos cuando lo ve en el archivo fuente, es probable que solía ser un archivo UTF-8 pero se guardó en la codificación incorrecta en algún lugar del camino.

Si alguien recibe este error en el sitio web de WordPress, debe cambiar el charset WP-Config DB:

define('DB_CHARSET', 'utf8mb4_unicode_ci');

en vez de:

define('DB_CHARSET', 'utf8mb4');

Debe tener copiar/pegar texto del documento de Word. Documento de Word Use citas inteligentes. Puede reemplazarlo con carácter especial (') o simplemente escribir su editor HTML (').

Estoy seguro de que esto resolverá tu problema.

Lo mismo me pasó con el personaje ' -' (signo largo largo).
Usé este simple reemplazo, así que resuélvalo:

htmlText = htmlText.Replace('–', '-');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top