none
Codificar un archivo .txt con caracteres especiales castellano, ñ y tildes. RRS feed

  • Pregunta

  •          Saludos compañeros.

        Estoy realizando una aplicación que se conecta a un portal Web y hace minería de datos, recopila información de forma automática.  Utilizo el componente WebBrowser para Vb.net. Debido a los problemas para que me devolviera las etiquetas (eso será otra pregunta) hice lo siguiente como solución:

        Cojo el html del componente y lo vuelco en un archivo llamado pagina.txt. Luego lo leo de nuevo y extraigo la información que necesito.

            obj_archivo.EscriFiche(webbrowser_paraleer, obj_archivo.rutaNombExt)
            arl_leido = obj_archivo.leerarchivo(obj_archivo.rutaNombExt, arl_etiquetasLeer)

    El tema es que cuando vuelco la información sobre el pagina.txt todos los caracteres extraños como la ñ y demás se graban con caracteres no legibles. 

                             <TITLE >Directorio �nico: Consultas</TITLE> 

                                  value='Empleados con los t�rminos gonzo gonzo* y BEGO�A* en NOMBRE';

    Existen otras líneas que si están codificadas como esta <STRONG >Tel&é;fono abreviado:</STRONG></td>. Líneas con sus etiquetas en html. 

    En el programa que estoy generando, en el Webbrowser, se muestra correctamente el html cuando hago la petición a la url, antes de exportarlo al archivo pagina.txt. Sin errores de acentos, las ñ se leen correctamente.

    Os adjunto el código  de como lo vuelco en el fichero :

    Public Function EscriFiche(webBrowswer_paracopiar As WebBrowser, NomFichRuta As String) As Boolean

            Dim resultado As Boolean = False
            Dim saveFileDialog1 As SaveFileDialog = New SaveFileDialog()
            saveFileDialog1.Filter = "Texto|*.txt"
            saveFileDialog1.Title = "Save an Image File"

            saveFileDialog1.FileName = NomFichRuta
            ' saveFileDialog1.ShowDialog()

            If Not (saveFileDialog1.FileName = "") Then

                Try
                    Using f_writer As New StreamWriter(saveFileDialog1.FileName)

                       f_writer.WriteLine((wbparacopiar.DocumentText, Encoding.GetEncoding(1250)))

                        f_writer.Close()
                        resultado = True

                    End Using

                Catch ex As Exception
                    MsgBox(ex.Message)

                End Try

            Else
                  '  MsgBox("No esta el fichero")
                resultado = False
                Return resultado

            End If
            Return resultado

        End Function

    He intentado aplicar una codificación a la hora de copiar el fichero tal que así (me genera este error):

    Using f_writer As New StreamWriter(saveFileDialog1.FileName, Encoding.GetEncoding(1250))

    Error BC30518 Error de resolución de sobrecarga porque no se puede llamar a ninguna de las funciones 'New' a las que se tiene acceso con estos argumentos:
        'Public Overloads Sub New(stream As Stream, encoding As Encoding)': El valor de tipo 'String' no se puede convertir en 'Stream'.
        'Public Overloads Sub New(path As String, append As Boolean)': El valor de tipo 'Encoding' no se puede convertir en 'Boolean'.

    Resumiendo :

    1 - Necesito entender por que el Html que se muestra en el WebBrowser se vuelca en el archivo pagina.txt con otro formato que no admite los acentos.

    2 - Necesito resolver este error de compilación Using f_writer As New StreamWriter(saveFileDialog1.FileName, Encoding.GetEncoding(1250)) para probar otro modo de escritura con codificación.

    3- Otra forma de abordar el problema también estaría bien.

    Gracias.

    Nota: he intentado otras cosas como limpiar el html antes de volcarlo con esta función pero sin éxito .

     Public Function arreglarHtml(v_linea As String) As String
            v_linea = v_linea.Replace("&ntilde", "ñ") 

       Return v_linea
        End Function

    Y esta llamada en la función :

     f_writer.WriteLine(arreglarHtml((webbrowser_paracopiar.DocumentText)), Encoding.Default)

    Pero es que la ñ y los acentos con fallos no vienen códificarlos en html si no como texto simple con acentos, por eso no puedo sustituirlos de este modo, lo he hecho al revés y no habido suerte tampoco.




    • Editado Abelzgz viernes, 6 de diciembre de 2019 19:10
    viernes, 6 de diciembre de 2019 19:05

Todas las respuestas

  • Deleted
    • Propuesto como respuesta Diana AcuñaModerator viernes, 6 de diciembre de 2019 22:17
    • Votado como útil Abelzgz viernes, 6 de diciembre de 2019 22:25
    • Propuesto como respuesta Pablo Rubio miércoles, 11 de diciembre de 2019 18:23
    viernes, 6 de diciembre de 2019 19:59
  • Te agradezco tu respuesta Walter . Tenía puesto 1252, utf-8 y demás. Aquí lo posteé por error. Pero ninguna de esas formas ha resuelto el problema.

    Cuando guardo el fichero ya existe el problema, leo otros archivos con ñ, acentos y demás y me los lee correctamente . El problema reside en el guardado o en el webbrowser (tal vez se pueda cambiar la codificación). Espero alguna otra idea.

    viernes, 6 de diciembre de 2019 21:42
  • entra en el panel de control despues en apariencia y personalizacion despues en cambiar configuracion de fuentes  una ves alli clikea la opcion que dice ocultar fuentes segun la configuracion de idiomas y haces click en restaurar configuracion de fuente predeterminada y prueba tu programa o mas bien ese archivo que generas en tu codigo esta es una posible solucion tambien verifica el idioma de tu sistema operativo

    tambien puedes cambiar el tipo de fuente y codificacion en el regedit pero te recomiendo que busques un tutorial de como hacer este ultimo paso ya que  si alteras algun registro de forma incorrecta puede causarle problemas a tu windows

    espero haberle ayudado.

    sábado, 7 de diciembre de 2019 1:52
  • Gracias por la respuesta pero esta muy alejado de la respuesta que pido.

    El Primer problema a solucionar : es la escritura del fichero con una correcta codificación.

    Using f_writer As New StreamWriter(saveFileDialog1.FileName, Encoding.GetEncoding(1252))

    Error BC30518 Error de resolución de sobrecarga porque no se puede llamar a ninguna de las funciones 'New' a las que se tiene acceso con estos argumentos:
        'Public Overloads Sub New(stream As Stream, encoding As Encoding)': El valor de tipo 'String' no se puede convertir en 'Stream'.
        'Public Overloads Sub New(path As String, append As Boolean)': El valor de tipo 'Encoding' no se puede convertir en 'Boolean'.

    Creo que solucionando este error tengo una solución provisional.


    • Editado Abelzgz sábado, 7 de diciembre de 2019 4:34
    • Propuesto como respuesta Pablo Rubio miércoles, 11 de diciembre de 2019 18:23
    sábado, 7 de diciembre de 2019 4:33
  • Esto se soluciona así :

      Dim strStreamW As Stream
            strStreamW = File.OpenWrite(saveFileDialog1.FileName)
            Dim f_writer As StreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

    Ya no hay errores en esas líneas,  pero sigue guardándome el webbrowser.DocumentText sin reconocer la ñ y los acentos. He intentado :

       Dim f_writer As StreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

    Dim f_writer As StreamWriter = New StreamWriter(strStreamW, Encoding.UTF32)

    Dim f_writer As StreamWriter = New StreamWriter(strStreamW, Encoding.UTF8)

        Dim f_writer As StreamWriter = New StreamWriter(strStreamW, Encoding.GetEncoding(1252))

    A ver, si alguien se lo ocurre el por qué ,gracias.

    • Editado Abelzgz domingo, 8 de diciembre de 2019 14:46
    • Propuesto como respuesta Pablo Rubio miércoles, 11 de diciembre de 2019 18:23
    domingo, 8 de diciembre de 2019 14:31