Solución:
Acabo de probar esto y funciona bien.
string test = "Testing 1-2-3";
// convert string to stream
byte[] byteArray = Encoding.ASCII.GetBytes(test);
MemoryStream stream = new MemoryStream(byteArray);
// convert stream to string
StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();
Si stream
ya se ha escrito, es posible que desee buscar el principio antes de leer el texto: stream.Seek(0, SeekOrigin.Begin);
Esto es tan común pero profundamente incorrecto. Los datos de Protobuf no son datos de cadena. Ciertamente no es ASCII. Estás usando la codificación hacia atrás. Una codificación de texto transfiere:
- una cadena arbitraria a bytes formateados
- bytes formateados a la cadena original
No tiene “bytes formateados”. Tú tienes bytes arbitrarios. Necesita usar algo como una codificación base-n (comúnmente: base-64). Esto transfiere
- bytes arbitrarios a una cadena formateada
- una cadena formateada a los bytes originales
mire Convert.ToBase64String y Convert. FromBase64String
una conversión de UTF8 MemoryStream a String:
var res = Encoding.UTF8.GetString(stream.GetBuffer(), 0 , (int)stream.Length)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)