He de tener un problema de decodificación de un archivo mediante una UTF8Encoder.

Estoy leyendo el texto de un archivo que he codificado con UTF-8 (Cadena > Byte)
Consulte el siguiente método.

public static void Encode(string Path)
    {
        string text;
        Byte[] bytes;
        using (StreamReader sr = new StreamReader(Path))
        {
            text = sr.ReadToEnd();
            UTF8Encoding Encoding = new UTF8Encoding();
            bytes = Encoding.GetBytes(text);
            sr.Close();
        }
        using (StreamWriter sw = new StreamWriter(Path))
        {
            foreach (byte b in bytes)
                sw.Write(b.ToString());
            sw.Close();
        }
    }

Me descodificar, a continuación, utilizando el método de

    public static String Decode(string Path)
    {
        String text;
        Byte[] bytes;
        using (StreamReader sr = new StreamReader(Path))
        {
            text = sr.ReadToEnd();
            UTF8Encoding Encoding = new UTF8Encoding();
            bytes = Encoding.GetBytes(text);
            text = Encoding.GetString(bytes);
            return text;
        }
    }

Pero en lugar de decodificación de los bytes a tener que volver a texto, sólo se devuelve como una cadena de números. Yo no puedo ver lo que estoy haciendo mal como yo realmente no tengo mucha experiencia con esto.

EDITAR: Para aclarar lo que estoy tratando de lograr. Estoy tratando de tener un archivo de texto guardar el texto como bytes, en lugar de caracteres/números. Esto es muy simple de cifrado para los archivos, así que usted no puede modificar, a menos que sepas lo que estás haciendo. La función Decode se utiliza a continuación para leer el texto (en bytes) del archivo y hacer de ellos en texto legible. Espero que esto aclara lo que estoy tratando de lograr.

PD: Sry por no comentarios, pero creo que es lo suficientemente corto como para ser comprensible

  • usted está haciendo b.ToString() – este no es el byte en sí, sino más bien una representación de cadena. Trate de usar un BinaryWriter?
  • Creo que su uso de un nombre de variable Encoding a ser muy confuso (y no estándar) normal C# convenciones de nomenclatura de tener como encoding.
  • No huelga que algo está mal, cuando estás utilizando la misma función de llamada (Encoding.GetBytes()) tanto en la codificación y decodificación de lado de las cosas?
  • Actualizado el OP para aclarar lo que estoy tratando de lograr, también se ordenan los nombres de las variables, no tengo idea de por qué me los puse con letras mayúsculas.
InformationsquelleAutor PeppeJ | 2012-09-27

3 Comentarios

  1. 4

    Exactamente lo que estás tratando de lograr? UTF-8 (y todos los demás Encodings) es un método para la conversión de cadenas de matrices de bytes de texto (datos sin procesar) y viceversa. StreamReader y StreamWriter se utilizan para leer/escribir cadenas desde/a los archivos. No hay necesidad de volver a codificar nada allí. Sólo mediante reader.ReadToEnd() devolverá la cadena correcta.

    Su pedazo de código que se parece a intentar escribir un archivo que contiene una lista de números (como una lectura, representación textual) correspondiente a UTF-8 bytes del texto dado. OK. Aunque esto es muy extraño idea (espero que no estés tratando de hacer algo como «cifrado» con eso.), este es, sin duda posible, si eso es realmente lo que quieres hacer. Pero usted necesita para separar los números legibles, de alguna manera, por ejemplo, por saltos de línea, y analizarlo a la hora de leerlos de nuevo:

    public static void Encode(string path)
    {
        byte[] bytes;
        using (var sr = new StreamReader(path))
        {
            var text = sr.ReadToEnd();
            bytes = Encoding.UTF8.GetBytes(text);
        }
        using (var sw = new StreamWriter(path))
        {
            foreach (byte b in bytes)
            {
                sw.WriteLine(b);
            }
        }
    }
    
    public static void Decode(string path)
    {
        var data = new List<byte>();
        using (var sr = new StreamReader(path))
        {
            string line;
            while((line = sr.ReadLine()) != null)
                data.Add(Byte.Parse(line));
        }
        using (var sw = new StreamWriter(path))
        {
            sw.Write(Encoding.UTF8.GetString(data.ToArray()));
        }
    }
    • He encontrado esta respuesta lo más cercano a lo que yo quería, y lo utilizó con éxito. Gracias!
  2. 0

    Este código se decodificar la cadena cifrada de texto, se trabajó en mi lado.

    public static String Decode(string Path)
        {
            String text;
            using (StreamReader sr = new StreamReader(Path))
            {
                    text = st.ReadToEnd();
                    byte[] bytes = Convert.FromBase64String(text);
                    System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
                    System.Text.Decoder decoder = encoder.GetDecoder();
                    int count = decoder.GetCharCount(bytes, 0, bytes.Length);
                    char[] arr = new char[count];
                    decoder.GetChars(bytes, 0, bytes.Length, arr, 0);
                    text= new string(arr);
    
                    return text;
            }
        }
  3. 0

    La StreamReader clase va a manejar la decodificación, por lo que su Decode() método puede ser tan simple como esto:

    public static string Decode(string path)
    {
        //This StreamReader constructor defaults to UTF-8
        using (StreamReader reader = new StreamReader(path))
            return reader.ReadToEnd();
    }

    No estoy seguro de lo que su Encode() método se supone que debe hacer, puesto que la intención parece ser la lectura de un archivo como UTF-8 y, a continuación, escriba el texto nuevo para el mismo archivo como UTF-8. Algo como esto podría tener más sentido:

    public static void Encode(string path, string text)
    {
        //This StreamWriter constructor defaults to UTF-8
        using (StreamWriter writer = new StreamWriter(path))
            writer.Write(text);
    }

Dejar respuesta

Please enter your comment!
Please enter your name here