Ñ y acentos en C#?

Iniciado por sexto, 27 Enero 2011, 17:17 PM

0 Miembros y 1 Visitante están viendo este tema.

sexto

Estoy haciendo una especie de Notepad en C#. Un ejercicio que nos ha mandado el profesor para este fin de semana.

He hecho el diálogo para abrir un archivo (.txt) y me lo abre bien, pero no me saca ni la letra ñ ni los acentos.

El código que tengo para abrir el archivo es el siguiente:


FileStream Archivo = new FileStream(AbrirArchivo.FileName, FileMode.Open, FileAccess.Read);
byte[] Contenido;
Contenido = new byte[Archivo.Length];
Archivo.Read(Contenido, 0, (int)Archivo.Length);
textBox1.Text = new UTF8Encoding().GetString(Contenido);


Me imagino que el problema está en el UTF8, pero he probado con ASCII y con un par mas y no hay forma de que los saque.
¿Como lo puedo conseguir?

Muchas gracias

.mokk.

http://msdn.microsoft.com/es-es/library/x8xxf0x5%28VS.80%29.aspx
Nose si esto te sirva, pero por lo menos a mi si
System.Text.Enconding.Default

chubichequer

Sexto en efecto ese utf8 no acepta los acentos ni las ñ en ese caso al menos, si usas default estaras usando un tipo de coficicacion que no esta en la lista y es la windows 1251, esa es la codificacion estandar de windows, es muy similar al ascii 256 pero con algunas diferencias, asi que puedes usar default en vez de utf8 o bien puedes usar esa codificacion de esta manera.

Encoding encode = System.Text.Encoding.GetEncoding("1251");

sexto

He probado las dos formas pero nada...

Lo estoy poniendo bien?

CitarFileStream Archivo = new FileStream(AbrirArchivo.FileName, FileMode.Open, FileAccess.Read);
            Encoding encode = System.Text.Encoding.GetEncoding("1251");

            byte[] Contenido;
            Contenido = new byte[Archivo.Length];
            Archivo.Read(Contenido, 0, (int)Archivo.Length);
            textBox1.Text = new encode("1251").GetString(Contenido);

Acabamos de empezar con Visual C# y aun no lo tengo yo muy dominado el tema...

[D4N93R]

No me le los codes de los encodings pero puedes usar "utf-8" por ejemplo. Pruebalo.

Garfield07

#5
Podrias probar algo como (en C)

FILE *FP = fopen (filename, (a+));
char byte;

while (!feof (FP))
{
byte = fgetc (FP)
if ((int)byte = 164)
printf ("%c", (char) 164);
else
putc (byte);
}


O algo asi. Hace tiempo que no uso fgetc asi que no se si los arg. están bien, pero mas o menos estaría correcta la idea...
Suerte!
Modf: Para los acentos es exactamente lo mismo
Remodf por si eso...:
La cosa es que leas un byte y si es una Ñ o demás, lo imprimas con su valor ASCII... Así me va a mi en C.


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

sexto

Con UTF8 ya probé y nada.

Lo que comentas de sustituir los carácteres por su código ASCII... no se me había ocurrido.
Ahora probaré.

seba123neo

Hola, creo que con poner System.Text.Encoding.Default se soluciona.

aca te paso un ejemplo que no funciona y me muestra los acentos mal y las "ñ" como caracteres no validos.

No Funciona:

Código (vbnet) [Seleccionar]
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim vLector As New StreamReader("c:\a.txt")
        Dim vTexto As String = vLector.ReadToEnd()
        TextBox1.Text = vTexto
        vLector.Close()
    End Sub
End Class


aca el que funciona:

Código (vbnet) [Seleccionar]
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim vLector As New StreamReader("c:\a.txt", System.Text.Encoding.Default)
        Dim vTexto As String = vLector.ReadToEnd()
        TextBox1.Text = vTexto
        vLector.Close()
    End Sub
End Class


en C#:

Código (csharp) [Seleccionar]
using System.IO;

public class Form1
{

private void Form1_Load(System.Object sender, System.EventArgs e)
{
StreamReader vLector = new StreamReader("c:\\a.txt", System.Text.Encoding.Default);
string vTexto = vLector.ReadToEnd();
TextBox1.Text = vTexto;
vLector.Close();
}
}


saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

callemanuel

Hola me imagino que la respuesta es un poco tarde para tu tarea pero se que al igual que yo muchas personas leen esto todavia "ya que aparece en google" y les puede servir como respuesta a otras personas

RESPUESTA:

CUANDO GUARDEN EL .TXT DEL QUE VAN A LEER EN LA PARTE DE ABAJO DICE CODIFICACIÓN, EN ESTE PUNTO ELIGAN UTF-8 QUE ES LA QUE RECONOCE C# Y PROBLEMA SOLUCIONADO CON TÍLDES Y TOD