2012-01-03 73 views
9

Tengo una cadena que contiene unicode, ¿cómo la convierto en codificación UTF-8?Cómo convertir una cadena a UTF8?

+1

Creo que esto ayuda a usted. http://stackoverflow.com/questions/497782/how-to-convert-a-string-from-utf8-to-ascii-single-byte-in-c – Bishan

Respuesta

21

Este fragmento hace una matriz de bytes con su cadena codificada en UTF-8:

UTF8Encoding utf8 = new UTF8Encoding(); 
string unicodeString = "Quick brown fox"; 
byte[] encodedBytes = utf8.GetBytes(unicodeString); 
+6

¿Por qué no usar simplemente 'Encoding.UTF8.GetBytes 'en lugar de' nuevo' subir otro codificador? –

+0

@ JesseC.Slicer Este fragmento es de uno de [ejemplos de Microsoft para la clase UTF8Encoding] (http://msdn.microsoft.com/en-us/library/system.text.utf8encoding.aspx). No estoy 100% seguro de por qué eligen hacerlo de esta manera, pero supongo que es para la seguridad de los subprocesos (mencionan que los miembros de la instancia no tienen garantizado que sean seguros para subprocesos, pero esta es solo mi suposición). – dasblinkenlight

1

tratar de este código

string unicodeString = "Quick brown fox"; 
var bytes = new List<byte>(unicodeString); 
     foreach (var c in unicodeString) 
      bytes.Add((byte)c); 
     var retValue = Encoding.UTF8.GetString(bytes.ToArray()); 
2

Pruebe esta función, esto debería solucionar fuera de la caja, se Sin embargo, puede ser necesario arreglar las convenciones de nombres.

private string UnicodeToUTF8(string strFrom) 
{ 
byte[] bytSrc; 
byte[] bytDestination; 
string strTo = String.Empty; 

bytSrc = Encoding.Unicode.GetBytes(strFrom); 
bytDestination = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, bytSrc); 
strTo = Encoding.ASCII.GetString(bytDestination); 

return strTo; 
} 
+0

Use esto para hacer que sus cadenas 1. XML compatible antes de guardar en la base de datos, 2. (o) Compatible con CSV antes de exportar a CSV – Arvin

1

Esto debe ser con el código mínimo:

byte[] bytes = Encoding.Default.GetBytes(myString); 
myString = Encoding.UTF8.GetString(bytes);