2012-08-03 15 views
7

Estoy trabajando con una página web en la que cambié el juego de caracteres de iso-8859-1 a utf-8. La parte superior de la página se lee así:Comillas simples que muestran un signo de interrogación en forma de diamante en los navegadores (sin base de datos o PHP)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>[title of site]</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

Yo sólo estoy usando caracteres ASCII en la página, y desde codificación UTF-8 supersets ASCII, esto debería estar bien. Sin embargo, las comillas simples en el texto se muestran como signos de interrogación rodeados de diamantes negros. He verificado que estos son citas simples ASCII (no citas rectas).

He leído mucho en línea que describe soluciones al problema que involucran PHP, citas mágicas, configuración de bases de datos, etc. Sin embargo, esta es una página HTML plana que no está siendo procesada por ningún programa.

Además, a muchos de los que tienen este problema se les pide que cambien a UTF-8 para solucionar el problema. Esto es exactamente cómo I introdujo el problema.

Consulte http://mch.blackcatwebinc.com/src/events.html para ver este problema.

+0

¿Cómo aparecen esas palabras en su base de datos? – deex

+0

El origen de la página ** no ** tiene comillas simples ASCII. Lo que sea que pusieron el texto allí los cambió a otra cosa, si es que son comillas simples ASCII en la fuente original (cosa que sinceramente dudo). – tripleee

Respuesta

5

Las únicas comillas en ASCII son la comilla simple '(0x27 o 39) y la comilla doble' (0x22 o 33). Lo que hay allí es una codificación de 8 bits que coloca comillas en 145 (0x91) y 146 (0x92) llamado CP1252; es la codificación estándar de 8 bits de Europa occidental para Windows. Si lo que desea es UTF-8, debe convertirlo a UTF-8, ya que no es válido UTF-8; utiliza UTF-8 válido múltiples bytes para caracteres por encima de 127 (0x7F), y coloca las comillas de apertura y cierre en U + 2018 y U + 2019, respectivamente.

+0

Todos ustedes están en lo correcto. Revisé el texto en vim, que 'enmascara síntomas', mostrando las comillas como comillas simples ya que lee el archivo como CP1252. Hice un 'conjunto de codificación = utf8' y guardé el archivo, y las comillas simples aparecieron como <92> - es decir, las comillas como sus equivalentes hexadecimales CP1252. Cuando se cambió a comillas simples ASCII (UTF-8), todo fue correcto. También necesito configurar mi IDE, CodeLobster, para guardar todos los archivos en UTF-8. – blackcatweb

0

La única diferencia que veo entre su etiqueta y la del sitio en el que estoy trabajando es el espacio después del punto y coma y ese utf es minúsculo en el suyo. Intente capitalizar UTF.

+0

Lo intenté localmente, sin efecto. Todavía esos signos de interrogación allí. – blackcatweb

+0

-1 El caso no es significativo aquí. – tripleee

1

Según el W3C, el meta charset

debe aparecer lo más cerca posible de la parte superior del elemento de cabeza

De http://www.w3.org/International/questions/qa-html-encoding-declarations#metacontenttype

Por lo tanto, podría tratar de colocar el meta etiqueta encima del title.

Además, como se menciona en la primera respuesta por @ user1505373, UTF siempre está en mayúscula y no hay espacio después del = en ninguno de los ejemplos que vi.

0

Todos los caracteres imprimibles ASCII tienen su código de entidad HTML equivalente. Algunos de estos caracteres generalmente son compatibles con los tipos de letra más comunes del sistema operativo, algunos se clasifican en Símbolos que nos llevan a su problema de representación.

Lo que supuestamente tiene allí es un cierre comilla simple, y con el fin de lograr que se imprime con razón, usted debe utilizar su código entidad, o & # 146; respectivamente. Si se trata de una apertura de comillas simples, entonces debe usar & # 145; en lugar.

Nota, no hay Nombre de entidad HTML para los dos caracteres ASCII (y some more) por lo que debe optar por la variante de código de entidad.

+0

No existe tal comilla simple de cierre ASCII. Solo los caracteres por debajo de 128 son ASCII. – prosfilaes

+0

Si tiene el nombre del siglo XXI, con gusto actualizaré la respuesta anterior. Por favor, simplemente no digas apóstrofo. – Xhezairi

+3

Es una cita única de cierre. Se puede codificar en CP1252 o Unicode o probablemente varias otras codificaciones de caracteres. No es ASCII. – prosfilaes

1

Su código fuente es no guardado en UTF-8, pero Latin1 CP1252, y esas frases son no comillas simples pero U + 2019 comillas simples derecha (codificados en Latin1). Guarde el archivo fuente en UTF-8 y funcionará.

+1

No es Latin-1. Es la página de códigos de Windows 1252. Para la mayoría de los propósitos, CP1252 es un superconjunto de Latin-1, pero todavía no son lo mismo. – prosfilaes

+0

De acuerdo, sea lo que sea, no es UTF-8, a pesar de que está declarado como UTF-8. Acabo de cambiar el navegador a Latin-1 y se muestra correctamente, que es simplemente un caso clásico de la codificación declarada y la codificación real no es la misma. – deceze

+0

CP1252 se usó con tanta frecuencia para Latin-1 que la mayoría de los navegadores tratan Latin-1 como si fuera CP1252, y HTML5 exige que lo hagan. – prosfilaes

1

La solución más simple es cambiar UTF-8 a windows-1252 en la etiqueta meta. Esto funciona, porque el servidor no anuncia ninguna codificación en el encabezado Content-Type, por lo que los navegadores y otros clientes utilizarán el especificado en una etiqueta meta.

El nombre windows-1252 es el nombre MIME preferido para la codificación Windows Latin-1 de 8 bits, también conocida como cp1252 y algunos otros nombres (a menudo mal representados como "ANSI").

Como explica @deceze, la codificación real de los datos es windows-1252, no UTF-8. Alternativamente, puede cambiar la codificación real a UTF-8 guardando el archivo con un comando adecuado en su software de autoría. Pero lo que realmente importa es que la codificación declarada coincida con la real.

Otra posibilidad es utilizar "escapes" para el apóstrofo, como &rsquo;. Funcionan independientemente de la codificación, pero hacen que el código fuente sea menos legible.

+0

Esto funcionó para mí, gracias. :) – InkHeart

Cuestiones relacionadas