2010-04-13 19 views
29

Tengo una pregunta, ¿qué codificación Unicode usar mientras codifica cadena .NET en base64? Sé que las cadenas están codificadas en UTF-16 en Windows, ¿así que mi forma de codificación es la correcta?Convierte el objeto String .net en cadena codificada en base64

public static String ToBase64String(this String source) { 
     return Convert.ToBase64String(Encoding.Unicode.GetBytes(source)); 
    } 

Respuesta

23

Lo que ha proporcionado es perfectamente funcional. Producirá una cadena codificada en base64 de los bytes de la cadena fuente codificada en UTF-16.

Si está preguntando si UTF-16 puede representar cualquier carácter en su cadena, entonces sí. La única diferencia entre UTF-16 y UTF-32 es que UTF-16 es una codificación de longitud variable; usa dos bytes para representar caracteres dentro de un subconjunto y cuatro bytes para todos los demás caracteres.

No hay caracteres Unicode que no puedan ser representados por UTF-16.

+2

* "No hay caracteres unicode que no puedan ser representados por UTF-16." * O de hecho por cualquiera de las otras transformaciones (UTF). –

2

MSDN confirma que la clase UnicodeEncoding representa una codificación UTF-16 de caracteres Unicode.

+0

Si mi cadena no solo tiene letras inglesas y dígitos decimales, ¿seguirá funcionando correctamente? – chester89

+2

@ chester89: ¡eso es lo que para Unicode es! – abatishchev

3

Tenga en cuenta que no tiene para usar UTF-16 simplemente porque eso es lo que usa .NET Strings. Cuando crea esa matriz de bytes, puede elegir cualquier codificación que maneje todos los caracteres de la cadena. Por ejemplo, UTF-8 sería más eficiente si el texto está en un idioma basado en el latín, pero aún puede manejar todos los caracteres conocidos.

La preocupación más importante es que cualquier software que descodifique la cadena base64, necesita saber qué codificación aplicar a la matriz de bytes para volver a crear la cadena original.

4

Aquí está la solución, he convertido una conversión aleatoria de cadenas como puede dar cualquier tamaño hasta 10 que dará salida a Base64.

//This function will return a random string from the given numeric characters 
public string RandomString(int size) 
{ 
const string legalCharacters = "1234567890"; 
Random random = new Random(); 
StringBuilder builder = new StringBuilder(); 
char ch = '\0'; 

for (int i = 0; i <= size - 1; i++) { 
    ch = legalCharacters(random.Next(0, legalCharacters.Length)); 
    builder.Append(ch); 
} 
return builder.ToString(); 
} 
public const string BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; 
public string DecToBase64(long lVal) 
{ 
string sVal = null; 
sVal = ""; 
while (lVal >= 64) { 
    sVal = sVal + DecToBase64(lVal/64); 
    lVal = lVal - 64 * (lVal/64); 
} 
sVal = sVal + Strings.Mid(BASE64, Convert.ToInt32(lVal) + 1, 1); 
return sVal; 
} 

//here is how we can have result in variable: 
string Base64 = ""; 
Base64 = DecToBase64(RandomString(10)); //this will produce a combination up-to length of 10 
Cuestiones relacionadas