2009-11-08 23 views
75

Quiero simplemente mostrar los símbolos de tilde (✔) y cruzada (✘) en una página HTML pero aparece como un cuadro o un pegamento ✠", obviamente algo que ver con la codificación.Mostrar símbolos Unicode en HTML

He establecido la metaetiqueta para mostrar utf-8, pero obviamente me falta algo.

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

Editar/Solución: De las observaciones hechas, usando FireBug me pareció que las cabeceras están pasando por mi perfil fueron, de hecho, "Content-Type: text/html" y no UTF-8. Al mirar el formato de archivo usando Notepad ++, se mostró que mi archivo estaba formateado como "UTF-8 sin BOM". Cambiando esto a solo UTF-8, los símbolos ahora se muestran correctamente ... pero Firebug todavía parece indicar el mismo tipo de contenido.

+1

+1 ¡Pregunta muy curiosa! –

+1

Gracias! ¡Eso me ayudó mucho! –

Respuesta

42

Debe asegurarse de que los encabezados del servidor HTTP sean correctos.

En particular, la cabecera:

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

debe estar presente.

La metaetiqueta es ignorada por los navegadores si el encabezado HTTP está presente.

También asegúrese de que su archivo está realmente codificado como UTF-8 antes de servirlo, compruebe/intente lo siguiente:

  • Asegúrese de que el editor de la guarda como UTF-8.
  • Asegúrese de que su FTP o cualquier programa de transferencia de archivos no se meta con el archivo.
  • Pruebe con entidades HTML codificadas, como &#uuu;.
  • Para estar realmente seguro, hexdump el archivo y mire como el personaje, para el ✔, debería ser E2 9C 94.

Nota: Si utiliza un carácter Unicode para los que el sistema no puede encontrar un glifo (sin fuente con ese personaje), su navegador debe mostrar un signo de interrogación o algún bloque como símbolo. Pero si ves varios caracteres romanos como tú, esto denota un problema de codificación.

+0

En realidad, la metaetiqueta no se ignora, pero el encabezado HTTP tiene prioridad. Gracias Konrad por esa precisión. –

+5

Tenga en cuenta que para usar un caracter unicode en la propiedad 'content' de un selector CSS :: :: before', uno necesitaría usar la notación de barra invertida. por ejemplo: '\ 2713' en lugar de '& # 2713'. –

4

Asegúrese de que realmente guarda el archivo como UTF-8, alternativamente use entidades HTML (&#nnn;) para los caracteres especiales.

+0

No parece haber una entidad HTML para ✔ o ¿me lo he perdido? ¿Cómo se puede "guardar" realmente el archivo como UTF-8 y cómo se puede verificar? –

+0

@Peter: utilizando un editor decente. La mayoría de los editores de texto tienen una opción en su diálogo "guardar como" para especificar la codificación del archivo, o tienen otra opción escondida en algún lugar de su menú. Vim usa la configuración 'fileencoding'. –

+8

@Peter, puede hacer referencia a cualquier carácter por su código. Prueba & # x2714; por un tic –

3

A diferencia de lo propuesto por Nicolas, la etiqueta meta en realidad no es ignorada por los navegadores. Sin embargo, el encabezado HTTP Content-Type siempre tiene prioridad sobre la presencia de una etiqueta meta en el documento.

Así que asegúrese de enviar la codificación correcta a través del encabezado HTTP, o no envíe este encabezado HTTP (no recomendado). La etiqueta meta es principalmente una opción alternativa para documentos locales que no se envían a través del tráfico HTTP.

El uso de entidades HTML también se debe considerar como una solución temporal, es decir, andar de puntillas alrededor del problema real. La configuración adecuada del servidor web evita muchas molestias.

0

Creo que este es un problema de archivo, usted simple guardó su archivo en codificación de 1 byte como latin-1. Busca tu editor en Google y cómo configurar los archivos en utf-8.

Me pregunto por qué hay editores que no usan por defecto utf-8.

14

Sé que ya se ha aceptado una respuesta, pero quería señalar algunas cosas.

Establecer el content-type y charset es obviamente una buena práctica, hacerlo en el servidor es mucho mejor, ya que garantiza la coherencia en toda la aplicación.

Sin embargo, utilizaría UTF-8 solo cuando el lenguaje de mi aplicación utiliza muchos caracteres que están disponibles solo en el juego de caracteres UTF-8. Si desea mostrar un carácter o símbolo de Unicode en uno de los casos, puede hacerlo sin cambiar el charset de su página.

HTML Los renderizadores siempre han sido capaces de mostrar símbolos que no forman parte del conjunto de caracteres de codificación de la página, siempre que mencione el símbolo en su numeric character reference (NCR). Suena raro, pero es verdad.

lo tanto, incluso si su html tiene una cabecera que indica que tiene una codificación de ansi o cualquiera de los juegos de caracteres iso, puede mostrar una marca de verificación mediante el uso de su referencia de carácter html, en decimal - & # 10003; o en hex: & # x2713;

Por lo tanto, es un poco difícil entender por qué enfrenta este problema en sus páginas. Puede verificar si el valor de NCR es correcto, esta es una buena referencia http://www.fileformat.info/info/unicode/char/2713/index.htm

+3

"Sin embargo, usaría UTF-8 solo cuando el lenguaje de mi aplicación utiliza muchos caracteres que están disponibles solo en el juego de caracteres UTF-8" ¿Por qué? ¿Cuál es la desventaja de cambiar? – dumbledad

+2

@dumbledad: Muy buena pregunta, creo que dejé que mi propio sesgo nublara mi respuesta. Lo que quise decir es si toda su aplicación ya no es utf-8, cambiar la aplicación de video para una sola página podría ser demasiado trabajo. Además, si su lenguaje de programación y su contenido no necesitan caracteres utf-8, puede copiar accidentalmente y pegar un carácter no deseado con el cual su editor estará bien (ya que está en modo utf-8), pero el código fallará durante la ejecución. Habiendo dicho eso, cuando pueda, actualice su codificación y conjunto de caracteres – Akshay

Cuestiones relacionadas