Estoy tratando de generar una cadena aleatoria en .NET y convertirla a bytes, y ejecutarla con un poco de dificultad. Me gustaría el conjunto completo de caracteres posibles, y tengo entendido que una cadena puede contener cualquier carácter.Generando una cadena aleatoria
Mi código es actualmente de la siguiente manera:
var plainText = new StringBuilder();
for (int j = 0; j < stringLength; ++j)
{
plainText.Append((char)_random.Next(char.MinValue, char.MaxValue));
}
byte[] x = Encoding.Unicode.GetBytes(plainText.ToString());
string result = Encoding.Unicode.GetString(x);
En teoría, plainText
y result
deben ser idénticos. En su mayoría son iguales, pero algunos de los caracteres originales se pierden, parecen ser caracteres del rango 55000-57000; se reemplazan con el carácter 65533.
Supongo que el problema está en mi codificación, pero pensé que Unicode manejaría esto correctamente. He probado UTF8 y UTF32, pero esos me dan el mismo problema.
¿Alguna idea?
extraño ?! Unicode podría ser, pero cuando lo probaste con utf-32 ?! – TheHe
¿Qué estás tratando de lograr? – CodesInChaos
Supongo que está produciendo una cadena UTF-16 no válida con caracteres sustitutos no pareados. – CodesInChaos