2009-09-21 43 views
10

Tenemos un sitio web que utiliza ASP clásico.Sustitución de texto ASP clásica y codificación UTF-8

Parte de nuestro proceso de lanzamiento sustituye los valores en un archivo y encontramos un error en el mismo donde se escribirá el archivo como UTF-8.

Esto hace que nuestra aplicación empiece a escupir basura. Los apóstrofos se devuelven como algunos caracteres codificados.

Si eliminamos la lista de materiales que dice que este archivo es UTF-8, el texto que se mostró previamente como basura ahora se muestra correctamente.

¿Hay algo que IIS hace de manera diferente cuando encuentra un archivo UTF-8?

+0

Si la eliminación de la BOM UTF-8 hace que la página a transmitir correctamente a continuación, el contenido no es UTF-8 sin duda? – AnthonyWJones

Respuesta

6

UTF-8 no utiliza listas de materiales; es un error molesto en algunos software de Microsoft que los pone allí. Necesita encontrar qué paso de su proceso de lanzamiento consiste en colocar una lista de materiales codificada en UTF-8 en sus archivos y corregirla; debe detenerlo incluso si es usando UTF-8, que realmente en estos días es lo mejor.

Pero dudo que sea IIS el que causa el problema de visualización. Lo más probable es que el navegador adivine el juego de caracteres de la página final que se muestra, y cuando ve bytes que parecen codificados en UTF-8, adivina que toda la página es UTF-8. Usted debe ser capaz de detenerlo haciendo que al señalar un conjunto de caracteres definitiva mediante el uso de una cabecera HTTP:

Content-Type: text/html;charset=iso-8859-1 

y/o un elemento meta en el código HTML

<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" /> 

ahora (suponiendo ISO-8859- 1 es en realidad el juego de caracteres en el que se encuentran sus datos) debería mostrar OK. Sin embargo, si su archivo realmente tiene una lista de materiales codificada en UTF-8 al comienzo, ahora verá eso como 'ï »¿' en su página, que es como esos bytes se ven en ISO-8859-1. Por lo tanto, todavía debes deshacerte de ese misBOM.

+0

Bien, esto tiene sentido. En realidad, era un error en algún código que se escribió específicamente para manejar este tipo de problema. Gracias. –

+1

Debo admitir que esta respuesta me confunde."UTF-8 no usa listas de materiales" ¿podría eloborar? ¿De qué manera es esto un "error"? Nunca me he encontrado con un problema al usar los archivos UTF-8 que incluyen este carácter de espacio de ancho cero, ¿qué problemas ha encontrado? – AnthonyWJones

+0

Cualquier herramienta de texto basada en bytes (como shells, cargadores de archivos de configuración, etc.) caerá inmediatamente cuando se presente con "ï» ¿"al comienzo de un archivo; el objetivo explícito de UTF-8 es ser compatible con herramientas que no saben nada de Unicode, pero UTF-8 + BOM lo rompe. Incluso algunas herramientas con reconocimiento de Unicode se tropezarán porque solo se espera que una BOM esté presente y se elimine automáticamente por el proceso de decodificación Unicode para UTF-16. UTF-8 + BOM rompe aplicaciones y no hay justificación para usarlo en las especificaciones Unicode; y ni siquiera hay ningún beneficio ya que UTF-8 no tiene problemas de orden de bytes. – bobince

13

que estaba buscando en el problema exactamente el mismo ayer y encontré:

http://blog.inspired.no/utf-8-with-asp-71/

parte importante de esa página, en caso de que se vaya ...

ASP CÓDIGO:

Response.ContentType = "text/html" 
Response.AddHeader "Content-Type", "text/html;charset=UTF-8" 
Response.CodePage = 65001 
Response.CharSet = "UTF-8" 

y la siguiente etiqueta HTML META:

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

Utilizamos la metaetiqueta y la propiedad aspSense CharSet, pero la página aún no se procesó correctamente. Después de agregar las otras tres líneas al archivo asp todo funcionó.

Espero que esto ayude!

+1

No necesita tanto la metaetiqueta y 'Response.CharSet =" UTF-8 "', ya que ambos sirven para el mismo propósito, personalmente prefiero usar 'Response.CharSet =" UTF-8 "' en lugar de establecer explícitamente como una metaetiqueta en [etiqueta: HTML]. También 'Response.AddHeader" Content-Type "," text/html; charset = UTF-8 "' es solo una forma explícita de escritura 'Response.ContentType =" text/html "' and 'Response.CharSet =" UTF- 8 "' lo que estás sugiriendo es inútil, apega a usar 'Response.ContentType' y' Response.CharSet'. – Lankymart

+0

Very hepfull @Werewolf thx u por su contribución .. – Artemination

+0

Usted me salvó la vida :) – kyawagwin

2

Si utiliza el acceso db debe escribir

Session.CodePage=65001 
Set tabtable= Conn.Execute("SELECT * FROM table") 
Cuestiones relacionadas