none
Mi programa codifica en unicode automaticamente RRS feed

  • Pregunta

  • Tengo una dificultad. Estoy haciendo un programa y utilizo un archivo texto para guardar cierta informacion. el problema esta en que el programa, y no se porque, me guarda la información en Unicode UTF-8 (algo así: 䉏䕒佒‱䉏䕒佒䐠⁅刱⹁††††††††††††††††††ⰵ〰⸰〰†††† 䅁䅁⁁†䅁䅁䅁䅁䅁䅁䅁䅁䅁䅁䅁䅁䅁䅁†††††††††††ⰲ〵⸰〰††††) y cuando quiero leer dicha información me le cambia algunos signos. Necesito que el programa no guarde la información en este tipo de codificación sino tal como lo escribí. Como le hago??

    Saludos

    Eleazar


    lunes, 22 de enero de 2018 18:42

Respuestas

  • "Elezar Barinas" escribió:

    > Estoy haciendo un programa y utilizo un archivo texto para guardar cierta
    > informacion. el problema esta en que el programa, y no se porque, me guarda
    > la información en Unicode UTF-8

    Hola, Elezar:

    Si el contenido del archivo de texto se guarda en Unicode o en UTF-8, digo yo que se deberá porque será la codificación que le habrás indicado que utilice, quizás sin darte cuenta de ello, y normalmente se suele escribir y leer correctamente el contenido del archivo de texto, siempre y cuando para leer el contenido hayas utilizado la misma codificación que utilizates para escribir, claro está.

    Pero sin saber exactamente el código que estás utilizando para guardar y leer el archivo de texto, lo único que te puedo decir es que también puedes hacer uso de la página de códigos ANSI actual del sistema operativo, tal y como muestra el siguiente ejemplo:

    Imports System.IO
    Imports System.Text
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Escribir en un archivo de texto utilizando la codificación ANSI.
            '
             Using outputFile As New StreamWriter("C:\Carpeta\Archivo.txt", False, Encoding.Default)
                 Dim lines As String() = {"áéíóúñ", "ÁÉÍÓÚÑ", "ÀÈÌÒÙàèìòù", "äëïöüÄËÏÖÜ"}
                 For Each line As String In lines
                     outputFile.WriteLine(line)
                 Next
             End Using
    
       End Sub

    Y para leer el contenido del archivo, utilizamos la MISMA CODIFICACIÓN:

        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    
            Using sr As New StreamReader("C:\Carpeta\Archivo.txt", Encoding.Default)
                 Dim texto As String = sr.ReadToEnd()
                 MessageBox.Show(texto)
             End Using
    
        End Sub

    Échale un vistazo a los siguientes temas:

    Cómo: Escribir texto en un archivo

    Cómo: Leer texto de un archivo

    Constructor StreamWriter (String, Boolean, Encoding)

    Encoding.Default (Propiedad)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    lunes, 22 de enero de 2018 19:36
    Moderador
  • No. Estás guardando tu cadena como ANSI/windows-1252, y la estás leyendo como Unicode/UTF-16.

    Deberías leerla como ANSI.

    Si yo guardo tu string en el bloc de notas como UNICODE, y la reabro como ANSI, entonces leo

    ÿþOBRERO1 OBRERO DE 1RA.                                    5,000.00          AAAAA   AAAAAAAAAAAAAAAAAAAAAAAAAAAA                      2,500.00        

    Siempre que veas caracteres "chinos", piensa (de manera refleja), que estás leyendo ansi en unicode. El ansi leído en unicode produce chino. 

     
    lunes, 22 de enero de 2018 19:59

Todas las respuestas

  • "Elezar Barinas" escribió:

    > Estoy haciendo un programa y utilizo un archivo texto para guardar cierta
    > informacion. el problema esta en que el programa, y no se porque, me guarda
    > la información en Unicode UTF-8

    Hola, Elezar:

    Si el contenido del archivo de texto se guarda en Unicode o en UTF-8, digo yo que se deberá porque será la codificación que le habrás indicado que utilice, quizás sin darte cuenta de ello, y normalmente se suele escribir y leer correctamente el contenido del archivo de texto, siempre y cuando para leer el contenido hayas utilizado la misma codificación que utilizates para escribir, claro está.

    Pero sin saber exactamente el código que estás utilizando para guardar y leer el archivo de texto, lo único que te puedo decir es que también puedes hacer uso de la página de códigos ANSI actual del sistema operativo, tal y como muestra el siguiente ejemplo:

    Imports System.IO
    Imports System.Text
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Escribir en un archivo de texto utilizando la codificación ANSI.
            '
             Using outputFile As New StreamWriter("C:\Carpeta\Archivo.txt", False, Encoding.Default)
                 Dim lines As String() = {"áéíóúñ", "ÁÉÍÓÚÑ", "ÀÈÌÒÙàèìòù", "äëïöüÄËÏÖÜ"}
                 For Each line As String In lines
                     outputFile.WriteLine(line)
                 Next
             End Using
    
       End Sub

    Y para leer el contenido del archivo, utilizamos la MISMA CODIFICACIÓN:

        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    
            Using sr As New StreamReader("C:\Carpeta\Archivo.txt", Encoding.Default)
                 Dim texto As String = sr.ReadToEnd()
                 MessageBox.Show(texto)
             End Using
    
        End Sub

    Échale un vistazo a los siguientes temas:

    Cómo: Escribir texto en un archivo

    Cómo: Leer texto de un archivo

    Constructor StreamWriter (String, Boolean, Encoding)

    Encoding.Default (Propiedad)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    lunes, 22 de enero de 2018 19:36
    Moderador
  • No. Estás guardando tu cadena como ANSI/windows-1252, y la estás leyendo como Unicode/UTF-16.

    Deberías leerla como ANSI.

    Si yo guardo tu string en el bloc de notas como UNICODE, y la reabro como ANSI, entonces leo

    ÿþOBRERO1 OBRERO DE 1RA.                                    5,000.00          AAAAA   AAAAAAAAAAAAAAAAAAAAAAAAAAAA                      2,500.00        

    Siempre que veas caracteres "chinos", piensa (de manera refleja), que estás leyendo ansi en unicode. El ansi leído en unicode produce chino. 

     
    lunes, 22 de enero de 2018 19:59