URGENTE!!!! Ayuda con acentos y eñes en VB.net

20/10/2006 - 01:02 por Luisito | Informe spam
Hola a todos! Estoy realizando un formulario en ASP, en el cual los
datos insertados en los input, textarea, checkbox y radio buttons,
son enviados a una plantilla de word.

El problema es que cuando abro la plantilla en word donde escribí la
información del formulario, no me reconoce los acentos y las eñes.
Yo Estoy usando Visual Estudio .Net 2002 y Microsoft Office XP. La
plantilla la tengo en formato .doc, pero ya he probado también en
formato .rtf y .xml.

Ya revise mi configuración en el web.config y he probado con:

<globalization requestEncoding="iso-8859-1"
responseEncoding="iso-8859-1"
fileEncoding="iso-8859-1" /> y con

<globalization requestEncoding="UTF-8"
responseEncoding="UTF-8"
fileEncoding="UTF-8" />

También he agregado en el <HEAD> ... </HEAD>

<META HTTP-EQUIV="Content-Type" CONTENT="text/html;
y
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;

Pero sigue sin reconocerme los acentos y eñes, lo que me escribe
en el archivo son:
à¡ é à­ ó ຠà±,
&#225; &#233; &#237; &#243; &#250; &#241,
á é í ó ú ñ, ;

Mi codigo es el siguiente:

Private Sub Btn1_ServerClick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Btn1.ServerClick
Dim strFilePath = Server.MapPath("tmp/") & "Plantilla.doc"

Dim fs2 As New FileStream(strFilePath, FileMode.Open, FileAccess.Read)
Dim d As New StreamReader(fs2)
Dim swrtarget As String
d.BaseStream.Seek(0, SeekOrigin.Begin)
swrtarget = d.ReadToEnd
d.Close()

Dim mystream As New MemoryStream()
Dim writer As New StreamWriter(mystream)
Dim nomFile As String

nomFile = "Temporary.doc"
writer.AutoFlush = True
swrtarget = swrtarget.Replace("##nombre##",
Server.HtmlEncode(TextBox01.Value))
swrtarget = swrtarget.Replace("##cargo##",
Server.HtmlEncode(TextBox02.Value))
swrtarget = swrtarget.Replace("##fecha##",
Server.HtmlEncode(TextBox03.Value))
swrtarget = swrtarget.Replace("##institucion##",
Server.HtmlEncode(TextArea01.Value.ToString))
writer.Write(swrtarget)

Response.Clear()
Response.AppendHeader("Content-Disposition", "attachment; filename="
& nomFile)
Response.AppendHeader("Content-Length", mystream.Length.ToString)
Response.ContentType = "application/octet-stream"
Response.BinaryWrite(mystream.ToArray())
Response.End()
End Sub

Por favor, AYUDENME!!! Me urge saber como poder solucionar este problema.

Muchas gracias!
 

Leer las respuestas

#1 Alberto Poblacion [MVP]
20/10/2006 - 08:23 | Informe spam
El problema de pérdida de acentos y eñes casi siempre ocurre cuando
conviertes un archivo desde/hacia un string en memoria. El string en memoria
se guarda en Unicode, pero el archivo normalmente utiliza algún juego de
caracteres de 8 bits, y si no le dices nada a .Net, al hacer la conversión
de Unicode a 8 bits se pierden los caracteres especiales.

En tu caso, tienes dos sitios en los que esto ocurre:
Donde pones Dim d As New StreamReader(fs2) deberías poner Dim d As New
StreamReader(fs2, codificacion)
y donde pones Dim writer As New StreamWriter(mystream) deberías poner Dim
writer As New StreamWriter(mystream, codificacion).

La codificacion hay que sacarla de System.Text.Encoding. Yo suelo usar
System.Text.Encoding.GetEncoding(1252), que es el juego de caracteres de
Windows en Español, pero también puede ser que te convenga
System.Text.Encoding.UTF8.



"Luisito" wrote in message
news:
Hola a todos! Estoy realizando un formulario en ASP, en el cual los
datos insertados en los input, textarea, checkbox y radio buttons,
son enviados a una plantilla de word.

El problema es que cuando abro la plantilla en word donde escribí la
información del formulario, no me reconoce los acentos y las eñes.
Yo Estoy usando Visual Estudio .Net 2002 y Microsoft Office XP. La
plantilla la tengo en formato .doc, pero ya he probado también en
formato .rtf y .xml.

Ya revise mi configuración en el web.config y he probado con:

<globalization requestEncoding="iso-8859-1"
responseEncoding="iso-8859-1"
fileEncoding="iso-8859-1" /> y con

<globalization requestEncoding="UTF-8"
responseEncoding="UTF-8"
fileEncoding="UTF-8" />

También he agregado en el <HEAD> ... </HEAD>

<META HTTP-EQUIV="Content-Type" CONTENT="text/html;
y
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;

Pero sigue sin reconocerme los acentos y eñes, lo que me escribe
en el archivo son:
à¡ é à­ ó ຠà±,
&#225; &#233; &#237; &#243; &#250; &#241,
á é í ó ú ñ, ;

Mi codigo es el siguiente:

Private Sub Btn1_ServerClick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Btn1.ServerClick
Dim strFilePath = Server.MapPath("tmp/") & "Plantilla.doc"

Dim fs2 As New FileStream(strFilePath, FileMode.Open,
FileAccess.Read)
Dim d As New StreamReader(fs2)
Dim swrtarget As String
d.BaseStream.Seek(0, SeekOrigin.Begin)
swrtarget = d.ReadToEnd
d.Close()

Dim mystream As New MemoryStream()
Dim writer As New StreamWriter(mystream)
Dim nomFile As String

nomFile = "Temporary.doc"
writer.AutoFlush = True
swrtarget = swrtarget.Replace("##nombre##",
Server.HtmlEncode(TextBox01.Value))
swrtarget = swrtarget.Replace("##cargo##",
Server.HtmlEncode(TextBox02.Value))
swrtarget = swrtarget.Replace("##fecha##",
Server.HtmlEncode(TextBox03.Value))
swrtarget = swrtarget.Replace("##institucion##",
Server.HtmlEncode(TextArea01.Value.ToString))
writer.Write(swrtarget)

Response.Clear()
Response.AppendHeader("Content-Disposition", "attachment;
filename="
& nomFile)
Response.AppendHeader("Content-Length", mystream.Length.ToString)
Response.ContentType = "application/octet-stream"
Response.BinaryWrite(mystream.ToArray())
Response.End()
End Sub

Por favor, AYUDENME!!! Me urge saber como poder solucionar este problema.

Muchas gracias!

Preguntas similares