Pregunta

Tengo una base de datos ASP Access que contiene cadenas en varios idiomas europeos. La base de datos fue poblada antes por los agentes de los respectivos países. Contiene entradas con caracteres acentuados, etc como era de esperar. Si abro la base de datos de MS Access con estos caracteres aparecen bien. Por ejemplo, el equivalente alemán de la muestra "abierto" como "Öffnen" (con suerte se puede ver una "O" con 2 puntos por encima de ella!).

Tengo código ASP que lee los registros de base de datos y devuelve en XML. El texto se pasa a XMLEncode para construir el XML, pero que sólo parece hacer frente a las 5 ofertas especiales como "<", "y", etc. Si yo tiro el XML los caracteres acentuados no se han modificado.

<English>Open</English>
<German>Öffnen</German> 

Si miro a los paquetes con Wireshark primas veo que el byte "o" es hexagonal D6, que parece ser que de decimal Unicode e ISO 8859-1 valor.

El problema comienza cuando trato de analizar el código XML en el lado del cliente JS. Me sale:

"An invalid character was found in text content"

de IE. FF y Chrome aceptan felizmente el XML sin hipo pero los espectáculos del navegador el carácter "O" como un diamante con un signo de interrogación en el interior.

http://www.validome.org/xml/validate/ informes " error que codifica ".

http://www.w3schools.com/dom/dom_validate.asp piensa que está muy bien.

El XML es UTF-8 codificado.

¿Qué necesito hacer para tener IE acepta mi XML sin queja?

¿Qué necesito hacer para tener los navegadores muestran las cosas correctamente?

¿Fue útil?

Solución

¿Cómo sabe el XML es codificado en UTF-8? No sé el entorno MS bien, pero en Java un problema común es suponer que sólo escribir el encabezado encoding="UTF-8" hace que sea codificación UTF-8. También hay que configurar el escritor a UTF-8 en realidad escritura.

Dijiste espectáculos Wireshark hexagonal D6, lo que indicaría la corriente es en realidad NO codificación UTF-8, independientemente de lo que dice el encabezado.

Otros consejos

Bueno, no estoy del todo seguro de por qué, pero yo era capaz de conseguir que funcione. Impulsada por los comentarios de Jim he cambiado el XML y la respuesta posterior codificación en 8859-1 a UTF-8, así como la codificación de la etiqueta META de las páginas.

Ahora funciona sin queja en el IE, y los navegadores muestran ahora los caracteres correctos.

También comprueba los bytes sin formato con Wireshark este tiempo y el carácter "O" se está codificando en el XML como 2 bytes (0xC3, 0x96), en lugar de 1 byte de 0xD6.

Así que en resumen:

En el código ASP del lado del servidor para generar la cabecera de respuesta XML:

return ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") ;

En el código ASP del lado del servidor para generar la respuesta en sí:

Response.ContentType = "text/xml; charset=UTF-8" ;
Response.Write (XMLResponse) ;

y en el encabezado de la página web:

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

Muchas gracias a Jim.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top