xdocument utf8 net codificar asp acentos c# .net encoding utf-8 iso-8859-1

utf8 - C#Convierte cadenas de UTF-8 a ISO-8859-1(Latin1) H



utf8 asp net (8)

Aquí hay una muestra para ISO-8859-9;

protected void btnKaydet_Click(object sender, EventArgs e) { Response.Clear(); Response.Buffer = true; Response.ContentType = "application/vnd.openxmlformatsofficedocument.wordprocessingml.documet"; Response.AddHeader("Content-Disposition", "attachment; filename=XXXX.doc"); Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-9"); Response.Charset = "ISO-8859-9"; EnableViewState = false; StringWriter writer = new StringWriter(); HtmlTextWriter html = new HtmlTextWriter(writer); form1.RenderControl(html); byte[] bytesInStream = Encoding.GetEncoding("iso-8859-9").GetBytes(writer.ToString()); MemoryStream memoryStream = new MemoryStream(bytesInStream); string msgBody = ""; string Email = "[email protected]"; SmtpClient client = new SmtpClient("mail.xxxxx.org"); MailMessage message = new MailMessage(Email, "[email protected]", "ONLINE APP FORM WITH WORD DOC", msgBody); Attachment att = new Attachment(memoryStream, "XXXX.doc", "application/vnd.openxmlformatsofficedocument.wordprocessingml.documet"); message.Attachments.Add(att); message.BodyEncoding = System.Text.Encoding.UTF8; message.IsBodyHtml = true; client.Send(message);}

He buscado en Google este tema y he analizado todas las respuestas, pero todavía no lo entiendo.

Básicamente necesito convertir cadenas UTF-8 a ISO-8859-1 y lo hago usando el siguiente código:

Encoding iso = Encoding.GetEncoding("ISO-8859-1"); Encoding utf8 = Encoding.UTF8; string msg = iso.GetString(utf8.GetBytes(Message));

Mi cadena fuente es

Message = "ÄäÖöÕõÜü"

Pero desafortunadamente mi cadena de resultados se convierte

msg = "�ä�ö�õ�ü

¿Qué estoy haciendo mal aquí?


Creo que su problema es que supone que los bytes que representan la cadena utf8 producirán la misma cadena cuando se interpreten como algo diferente (iso-8859-1). Y eso simplemente no es el caso. Te recomiendo que leas este excelente artículo de Joel spolsky.


Parece un código extraño. Para obtener una cadena de transmisión de bytes Utf8, todo lo que necesita hacer es:

string str = Encoding.UTF8.GetString(utf8ByteArray);

Si necesita guardar el flujo de bytes iso-8859-1 en algún lugar, solo use: línea de código adicional para el anterior:

byte[] iso88591data = Encoding.GetEncoding("ISO-8859-1").GetBytes(str);


Primero debe arreglar la fuente de la cadena.

Una cadena en .NET es en realidad una matriz de puntos de código Unicode de 16 bits, caracteres, por lo que una cadena no está en ninguna codificación en particular.

Es cuando toma esa cadena y la convierte en un conjunto de bytes que la codificación entra en juego.

En cualquier caso, la forma en que lo hiciste, codificó una cadena a una matriz de bytes con un juego de caracteres, y luego decodificando con otro, no funcionará, como puedes ver.

¿Puede decirnos más sobre de dónde proviene esa secuencia original y por qué cree que se ha codificado incorrectamente?


Prueba esto:

Encoding iso = Encoding.GetEncoding("ISO-8859-1"); Encoding utf8 = Encoding.UTF8; byte[] utfBytes = utf8.GetBytes(Message); byte[] isoBytes = Encoding.Convert(utf8,iso,utfBytes); string msg = iso.GetString(isoBytes);


Solo usé la solución de Nathan y funciona bien. Necesitaba convertir ISO-8859-1 a Unicode:

string isocontent = Encoding.GetEncoding("ISO-8859-1").GetString(fileContent, 0, fileContent.Length); byte[] isobytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(isocontent); byte[] ubytes = Encoding.Convert(Encoding.GetEncoding("ISO-8859-1"), Encoding.Unicode, isobytes); return Encoding.Unicode.GetString(ubytes, 0, ubytes.Length);


Utilice Encoding.Convert para ajustar la matriz de bytes antes de intentar decodificarla en su codificación de destino.

Encoding iso = Encoding.GetEncoding("ISO-8859-1"); Encoding utf8 = Encoding.UTF8; byte[] utfBytes = utf8.GetBytes(Message); byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes); string msg = iso.GetString(isoBytes);


Encoding targetEncoding = Encoding.GetEncoding(1252); // Encode a string into an array of bytes. Byte[] encodedBytes = targetEncoding.GetBytes(utfString); // Show the encoded byte values. Console.WriteLine("Encoded bytes: " + BitConverter.ToString(encodedBytes)); // Decode the byte array back to a string. String decodedString = Encoding.Default.GetString(encodedBytes);