none
¿Cómo puedo aplicar otras codificaciones al siguiente texto? (explico) RRS feed

  • Pregunta

  • Estoy intentando cambiarle la codificación a un archivo de texto que creo vía programa porque los caracteres con tilde no salen. Lo creo así más o menos:

    Using ArchivoDeTexto As New StreamWriter("Arcchivo.txt", False, Encoding.ASCII)

    ......ArchivoDeTexto.WriteLine(cLinea1)

    End Using

    Como ven en el código anterior le aplico codificación ASCII pero sigue viéndose mal el texto, probé con todas las que aparecen pero con ninguno salen correctamente las tildes.

    Con Encoding.CODIFICACION, puedo aplicar unas cuantas codificaciones, pero haciendo este listado:

    Using Lista As New StreamWriter("D:\Lista.txt")

    ....For Each a In Encoding.GetEncodings
    ........Lista.WriteLine(a.Name)
    ....Next
    End Using

    Veo que hay una lista amplia de otras codificaciones, la consulta es ¿cómo las puedo aplicar?

    domingo, 6 de agosto de 2017 21:08

Respuestas

  • Hola

    Te recomendaría trabajar con archivos xml 

    Los archivos XML contienen los datos reales (o contenido) y los elementos que identifican los datos. El Diseñador XML proporciona dos formas de ver y trabajar con documentos XML, la vista XML y la vista Datos. La vista XML, como su nombre indica, es código XML real (o formato XML). La vista Datos interpreta el código fuente XML y muestra el contenido en una cuadrícula de datos. El uso del Diseñador XML en la vista XML proporciona la codificación de color que facilita la lectura del código e IntelliSense, para ayudarle a encontrar errores de sintaxis. Además, si un esquema se asocia con el archivo XML, se habilita la función de finalización de instrucciones y también una opción para validar los datos XML con el esquema.

    Te proporciono un ejemplo de como crear un archivo xml


    Dim SerieXML As New XDocument( 
    new XDeclaration("1.0", "utf-8", "yes"), 
    new XComment("Lista de numeros de serie"),
           new XElement("DocumentElement", 
                 new XElement("Series", new XElement("SerieId", "1"), 
                 new XElement("Descripcion", "001")), 
    
          new XElement("Series", 
               new XElement("SerieId", "2"), 
               new XElement("Descripcion", "002")),
    
     
          new XElement("Series", 
               new XElement("SerieId", "3"), 
    new XElement("Descripcion", "003")) ))
    
    SerieXML.Save("\..\..\Series.xml")


    Resultado

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <!--Lista de numeros de serie-->
    <DocumentElement>
      <Series>
        <SerieId>1</SerieId>
        <Descripcion>001</Descripcion>
      </Series>
      <Series>
        <SerieId>2</SerieId>
        <Descripcion>002</Descripcion>
      </Series>
      <Series>
        <SerieId>3</SerieId>
        <Descripcion>003</Descripcion>
      </Series>
    </DocumentElement>

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    • Editado Pedro Ávila lunes, 7 de agosto de 2017 0:11
    • Marcado como respuesta James2016-2 lunes, 7 de agosto de 2017 0:49
    domingo, 6 de agosto de 2017 23:18
  • Hola James:

     Te comento que el objeto StreamWriter hace uso por default de la codificacion UTF-8 por lo cual es extraño que los caracteres que mencionas no se estén almacenando, podrias intentar dos cosas:

    1. Enviar todos los caracteres usando el valor UNICODE para utilizar el formato UTF-16:

            Using sw As New StreamWriter("testFileOutput1.txt", False, System.Text.Encoding.Unicode)
               Dim array(4) As String
                array(0) = "rowtest$%6¨´"
                array(1) = "seconññññtest^{} {{{{#%"
                array(2) = "´´´´´¿ ¿ ¿ ????==="
                array(3) = "éôéç)"
                array(4) = "José Luis Garcí¨a"
                For Each row As String In array
                   
                    sw.WriteLine(row)
                Next
            End Using

    Resultado:

    2. Utilizar el método GetUnicode y "Windows-1252" como parametro:

      
            Using sw As New StreamWriter("testFileOutput.txt", False, System.Text.Encoding.GetEncoding("Windows-1252"))
                Dim array(4) As String
                array(0) = "rowtest$%6¨´"
                array(1) = "seconññññtest^{} {{{{#%"
                array(2) = "´´´´´¿ ¿ ¿ ????==="
                array(3) = "éôéç)"
                array(4) = "José Luis Garcí¨a"
                For Each row As String In array
                   
                    sw.WriteLine(row)
                Next
            End Using

    resultado:

     Como puedes observar todos los caracteres son enviados.

     Has tus pruebas, lee la documentación sugerida en los links y nos comentas tus resultados.


    Saludos desde Monterrey, Nuevo León, México!!!




    domingo, 6 de agosto de 2017 23:43
  • Hola James:

    Como ven en el código anterior le aplico codificación ASCII pero sigue viéndose mal el texto, probé con todas las que aparecen pero con ninguno salen correctamente las tildes.

     -----

    es que veo las tildes si abro el archivo de texto con el block de notas por ejemplo, pero si lo abro desde un programa antiguo los caracteres se cambian

    -----

     Creo que ese tipo de cosas se mencionan desde el momento en que creas la pregunta, porque es mas que claro que el que esta generando el problema es ese "programa antiguo", te comento que existen muchas aplicaciones como el block de notas que te permite configurar la codificación en el que deseas te muestre el texto, por ahí y ese programa que mencionas podría tener una configuración para ciertos caracteres.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta James2016-2 lunes, 7 de agosto de 2017 0:48
    lunes, 7 de agosto de 2017 0:13

Todas las respuestas

  • Buenas,  

    Prueba a usar UTF8,  es la codificación española con tildes del castellano y ñ. 

    Encoding UTF8

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!


    domingo, 6 de agosto de 2017 21:18
  • Gracias, es que veo las tildes si abro el archivo de texto con el block de notas por ejemplo, pero si lo abro desde un programa antiguo los caracteres se cambian y me parece que es por la codificación del texto que no es la adecuada, por eso deseo probar con otras.
    • Editado James2016-2 domingo, 6 de agosto de 2017 22:01
    domingo, 6 de agosto de 2017 22:01
  • Puede ser porque el programa antiguo no está preparado para UTF8. El asunto ahí sería ver que codificación tiene,  pero el problema es que si tu entrada(con lo que llenas el fichero) es UTF8,  si al pasarlo al fichero lo cambias,  ya va a quedar símbolos raros,  lo que tienes que hacer no es actuar sobre la escritura,  sino sobre el textbox o la lectura inicial de los datos,  evita en la entrada original los caracteres fuera de la codificación. 

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    domingo, 6 de agosto de 2017 22:16
  • Hola

    Te recomendaría trabajar con archivos xml 

    Los archivos XML contienen los datos reales (o contenido) y los elementos que identifican los datos. El Diseñador XML proporciona dos formas de ver y trabajar con documentos XML, la vista XML y la vista Datos. La vista XML, como su nombre indica, es código XML real (o formato XML). La vista Datos interpreta el código fuente XML y muestra el contenido en una cuadrícula de datos. El uso del Diseñador XML en la vista XML proporciona la codificación de color que facilita la lectura del código e IntelliSense, para ayudarle a encontrar errores de sintaxis. Además, si un esquema se asocia con el archivo XML, se habilita la función de finalización de instrucciones y también una opción para validar los datos XML con el esquema.

    Te proporciono un ejemplo de como crear un archivo xml


    Dim SerieXML As New XDocument( 
    new XDeclaration("1.0", "utf-8", "yes"), 
    new XComment("Lista de numeros de serie"),
           new XElement("DocumentElement", 
                 new XElement("Series", new XElement("SerieId", "1"), 
                 new XElement("Descripcion", "001")), 
    
          new XElement("Series", 
               new XElement("SerieId", "2"), 
               new XElement("Descripcion", "002")),
    
     
          new XElement("Series", 
               new XElement("SerieId", "3"), 
    new XElement("Descripcion", "003")) ))
    
    SerieXML.Save("\..\..\Series.xml")


    Resultado

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <!--Lista de numeros de serie-->
    <DocumentElement>
      <Series>
        <SerieId>1</SerieId>
        <Descripcion>001</Descripcion>
      </Series>
      <Series>
        <SerieId>2</SerieId>
        <Descripcion>002</Descripcion>
      </Series>
      <Series>
        <SerieId>3</SerieId>
        <Descripcion>003</Descripcion>
      </Series>
    </DocumentElement>

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    • Editado Pedro Ávila lunes, 7 de agosto de 2017 0:11
    • Marcado como respuesta James2016-2 lunes, 7 de agosto de 2017 0:49
    domingo, 6 de agosto de 2017 23:18
  • Hola James:

     Te comento que el objeto StreamWriter hace uso por default de la codificacion UTF-8 por lo cual es extraño que los caracteres que mencionas no se estén almacenando, podrias intentar dos cosas:

    1. Enviar todos los caracteres usando el valor UNICODE para utilizar el formato UTF-16:

            Using sw As New StreamWriter("testFileOutput1.txt", False, System.Text.Encoding.Unicode)
               Dim array(4) As String
                array(0) = "rowtest$%6¨´"
                array(1) = "seconññññtest^{} {{{{#%"
                array(2) = "´´´´´¿ ¿ ¿ ????==="
                array(3) = "éôéç)"
                array(4) = "José Luis Garcí¨a"
                For Each row As String In array
                   
                    sw.WriteLine(row)
                Next
            End Using

    Resultado:

    2. Utilizar el método GetUnicode y "Windows-1252" como parametro:

      
            Using sw As New StreamWriter("testFileOutput.txt", False, System.Text.Encoding.GetEncoding("Windows-1252"))
                Dim array(4) As String
                array(0) = "rowtest$%6¨´"
                array(1) = "seconññññtest^{} {{{{#%"
                array(2) = "´´´´´¿ ¿ ¿ ????==="
                array(3) = "éôéç)"
                array(4) = "José Luis Garcí¨a"
                For Each row As String In array
                   
                    sw.WriteLine(row)
                Next
            End Using

    resultado:

     Como puedes observar todos los caracteres son enviados.

     Has tus pruebas, lee la documentación sugerida en los links y nos comentas tus resultados.


    Saludos desde Monterrey, Nuevo León, México!!!




    domingo, 6 de agosto de 2017 23:43
  • Hola James:

    Como ven en el código anterior le aplico codificación ASCII pero sigue viéndose mal el texto, probé con todas las que aparecen pero con ninguno salen correctamente las tildes.

     -----

    es que veo las tildes si abro el archivo de texto con el block de notas por ejemplo, pero si lo abro desde un programa antiguo los caracteres se cambian

    -----

     Creo que ese tipo de cosas se mencionan desde el momento en que creas la pregunta, porque es mas que claro que el que esta generando el problema es ese "programa antiguo", te comento que existen muchas aplicaciones como el block de notas que te permite configurar la codificación en el que deseas te muestre el texto, por ahí y ese programa que mencionas podría tener una configuración para ciertos caracteres.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta James2016-2 lunes, 7 de agosto de 2017 0:48
    lunes, 7 de agosto de 2017 0:13
  • Gracias, esa es otra opción.
    lunes, 7 de agosto de 2017 0:46
  • mm, la segunda forma es la que permite especificar el resto de codificaciones. Interesante, voy a revisar con calma los enlaces proporcionados, muchas gracias.
    lunes, 7 de agosto de 2017 0:48