Foros del Web » Programando para Internet » ASP Clásico »

UTF8 y el objeto Microsoft.XMLDOM

Estas en el tema de UTF8 y el objeto Microsoft.XMLDOM en el foro de ASP Clásico en Foros del Web. amiguetes, llevo días buscando varias formas de crear un XML con un texto, que luego quiero recuperar desde ASP. El texto es UTF-8 y puede ...
  #1 (permalink)  
Antiguo 23/10/2007, 16:09
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
UTF8 y el objeto Microsoft.XMLDOM

amiguetes, llevo días buscando varias formas de crear un XML con un texto, que luego quiero recuperar desde ASP.

El texto es UTF-8 y puede tener toda clase de caracteres. Tengo experiencias más o menos satisfactorias con el objeto "MSXML2.XMLHTTP", aunque no sé porque sólo me funciona con "GET".

Pero el caso es que quería finalmente utilizar Microsoft.XMLDOM y he creado un codigo limpio y sencillo el cual problema "casi" perfectamente.

leeXML.asp

Código:
<%Response.Charset = "utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>TAGleado | Tag Search Engine</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<head><body>

<%
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.async = False
strFile = Server.MapPath("datos.xml")
objXML.Load (strFile)


Set language = objXML.selectNodes("//language")

For i = 0 to (language.Length - 1) 
	Response.Write("language: " & language(i).GetAttribute("id") & "<br>" & vbcrlf)

	Set menu_images = language(i).selectNodes("menu_images")
	response.write (menu_images(0).text & "<br>" & vbcrlf)
   	Set sel = language(i).selectNodes("sel")
	Set s = sel(0).selectNodes("s")
   	For j = 0 to (s.Length-1)
    	  response.Write(s(j).text & "<br>" & vbcrlf)
   	Next
   	Set sel = nothing
	Set s = nothing
Next

Set language = nothing
%>

</body></html>
datos.xml

Código:
<?xml version="1.0" encoding="UTF-8"?>
<mixml>
   <language id="test">
        <menu_images>مملكة البحرين</menu_images>
        <sel>
			<s>opción 1</s>
			<s>opción 2</s>
			<s>opción 3</s>
			<s>opción 4</s>
        </sel>

	</language>
</mixml>
además ambos archivos están codificados UTF-8, y en el ASP, si inserto cualquier caracter UTF-8 lo muestra en pantalla bien, no así lo que recupera del XML. Osea que es el proceso de recuperación de datos del objeto Microsoft.XMLDOM donde pierde la codificación.

La pregunta es, ¿cómo logro recuperar los datos en su formato original?

gracias


PD. Aprovecho para decir que acabo de verificar que en JavaScript funciona perfectamente, lo que pasa es que yo preferiría hacerlo desde ASP y weno que también me fastidia cuando sale un error complicadillo como este. Solución tiene que haber porque sino no podrían utilizar este objeto por ejemplo los que utilizan alfabeto cirílico o árabe, etc.

Última edición por dblanco; 23/10/2007 a las 17:44
  #2 (permalink)  
Antiguo 24/10/2007, 03:54
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 3 meses
Puntos: 7
Re: UTF8 y el objeto Microsoft.XMLDOM

o el español.

Te recomiendo que hagas lo siguiente: El archivo XML codifícalo en utf-8 (y procura que sea asi tambien con el editor que usas para crear el archivo XML. Ten cuidado tambien con los CRs y LFs (no me preguntes por qué. Aún no lo he averiguado) por que estropean la lectura desde XMLDOM.

Bien. En el script ASP usa la codificación iso-8859-1 si usas XHTML (!DOCTYPE... ) o utf-8 si es HTML. Tampoco se la razón de que esto funcione (al menos a mi). He buscado desesperadamente por todo internet y no he encontrado nada que me satisfaga. Si encuentras algo interesante al respecto, estaré encantado de que me lo digas.

Por cierto, carga el archivo XML ANTES de codificar. Nada de response.Charset = "utf-8", hasta que tengas cargado el archivo en tu objeto. Luego ya puedes codificar el charset

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


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 24/10/2007, 04:04
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
Re: UTF8 y el objeto Microsoft.XMLDOM

hola tammander gracias por interesarte por mi problema.

Como puedes verificar en mi exposición, tengo codificiados utf-8, tanto el XML como el ASP y este último también lleva la especificación:

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

Respecto a los CR, LF, el XML es un texto normal editad con NOTEPAD y guardado utf-8.

Así que por ahí no parece que vayan los tiros. Creo que tiene que ser alguna especificación del objeto Microsoft.XMLDOM para ASP, puesto que como he añadido luego en el PD, si en lugar de ASP utilizo el Javascript, me codifica perfectamente a utf-8

Gracias y un saludo
  #4 (permalink)  
Antiguo 24/10/2007, 04:15
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 3 meses
Puntos: 7
Re: UTF8 y el objeto Microsoft.XMLDOM

Prueba lo que te he dicho:

- Lectura del archivo XML ANTES de dar el charset a la página ASP
- !DOCTYPE --> iso-8859-1


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #5 (permalink)  
Antiguo 24/10/2007, 09:18
 
Fecha de Ingreso: febrero-2007
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: UTF8 y el objeto Microsoft.XMLDOM

menudo cachondeo esto de las eñes y tildes y demas, si encuentras una solución por favor publicala que a mi me esta jodiendo algo con CDonts.

Suerte
  #6 (permalink)  
Antiguo 24/10/2007, 10:27
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
Re: UTF8 y el objeto Microsoft.XMLDOM

si perdona tammander.

Pues a ver, si pongo iso-8859-1, me funciona !!! y tanto da si el charset lo pongo antes o después de codificar.

Pero mucho ojo porque, si actualizo la página ya no funciona.

Cada vez comprendo menos, pero esta es una nueva posibilidad para trabajar, resumiendo:

- Guardar los documentos en formato UTF-8
- Utilizar el charset UTF-8 de ASP
- Utilizar content="text/html; charset=iso-8859-1" en el meta
- No actualizar nunca las páginas, porque los datos recogidos del XML y todo lo que se escriba desde ASP se verá mal.

Weno, es una opción, pero la verdad es que no me gusta eso de no poder actualizar, ya que los visitantes suelen hacerlo.

Seguiremos investigando, saludos.
  #7 (permalink)  
Antiguo 24/10/2007, 10:43
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
Re: UTF8 y el objeto Microsoft.XMLDOM

acabo de descubrir otra cosa y es que tenía entendido que era mejor guardar los documentos UTF-8 con sin BOM, para mayor compatibilidad con servidores Linux. Pero resulta que si guardo el archivo ASP con BOM, ya no se me escoña al actualizar.

Demonios, demonios ... lo que acojona un poco es trabajar con "text/html; charset=iso-8859-1" en una página internacional que va ha mostrar caracteres cirílicos, chinos, árabes ... ESTO ES CONTRANATURA !!!

en fin como mi código se complica mucho, ya recojo y envío datos MySQL, aparte de leer XML y paso de variables con caracteres especiales, etc. Pues será cuestión de ir haciendo pruebas a ver si consiguo que con alguna configuración funcione todo a la vez.

Saludos
  #8 (permalink)  
Antiguo 24/10/2007, 11:32
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 3 meses
Puntos: 7
Re: UTF8 y el objeto Microsoft.XMLDOM

A ver... Buscando, buscando me he encontrado con esto.

BOM o Byte Order Mark

Según pone ahí, se usaba para especificar que el texto estaba codificado en UTF-8. Linux/Unix ya no lo usa pero el Notepad guarda un BOM en el archivo (y casi todas las aplicaciones Windows lo hacen).

Fijate lo que pone:
Cita:
...no se recomienda esta práctica, pues puede interferir con el correcto procesado de códigos importantes...

...También podría interferir con el código fuente de aquellos lenguajes de programación que no lo reconozcan...
Sinceramente, yo nunca he tenido problemas con las eñes y acentos. Intenta leer desde un archivo XML creado en un sistema Linux/Unix y nos cuentas.


He estado buscando información al respecto aqui y allá (bendito San Google) y la conclusión que he sacado es que el BOM era un sistema antiguo para definir el charset que se ha usado para crear el archivo. Actualmente está en desuso. No solo eso, todo el componente MSXML tiene ese bug (eso incluye XMLDOM y HTTPREQUEST ) Se atasca con ese byte de las narices.

Pero lo gracioso no es eso. Curiosamente los únicos programas que siguen usando esta "marca" son los de Windows Concretamente el NotePad

Posiblemente, si usas algun editor libre de esa marca (casi todos los que "vienen" de Linux, el Dreamweaver tambien, ... ) te librarás de ese BOMbon



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -

Última edición por tammander; 24/10/2007 a las 15:19
  #9 (permalink)  
Antiguo 25/10/2007, 06:37
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 3 meses
Puntos: 1
Re: UTF8 y el objeto Microsoft.XMLDOM

utilizo WeBuilder y me deja guardar con o sin BOM. Pero como te digo lo curioso es que ASP me interpreta bien con BOM, no sin que digamos es el standard.

De todas formas he optado por leer mi XML desde Javascript por dos motivos:

1º) no me gusta la idea de tener que utilizar charset=iso-8859-1 para una página en la que todo lo que va ha aparecer por pantalla es uft-8

2º) al leer el XML desde el lado del cliente, liberará de trabajo al servidor

A modo de resumen creo que el objeto Microsoft.XMLDOM de ASP, simplemente está mal diseñado.

He experimentado con MSXML2.DOMDocument y tampoco me termina de convencer, también hace la pirula con los caracteres recuperados si haces F5 cuando utilizas el método GET y no sé porqué me peta con los XML de guardo en disco duro con el método POST, aunque el archivo original online lo lea sin problemas. Este asunto lo trato aquí por si alguien puede echar una manita: http://www.forosdelweb.com/f26/recup...os-xml-527865/

En definitiva desde ASP ningún sistema me convence mucho para recuperar datos de un XML, sobretodo por el tema del utf-8

saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:23.