Curiosidad sobre los streams y los encodings

12/09/2004 - 19:43 por Zephryn Xirdal | Informe spam
Hola de nuevo, y de nuevo con mi zxFortunes.

He conseguido poder leer bien de un archivo de texto (esto es que me leyera
las letras acentuadas y que la posición se corresponda con la real dentro
del texto) mediante una lectura con el encoding de UTF7.

Pero entonces, los textos en inglés no se corresponde lo leído con la
posición dentro del texto. En los textos en ingés se leen con UTF8 o ASCII,
pero entonces los que están en castellano se leen mal.

El código es este:
for(int i=0;i<this.m_numFortuneFiles;i++)

{

System.Text.Encoding enc=System.Text.Encoding.ASCII;

FileStream fsRead=new FileStream(m_fortuneFiles[i],FileMode.Open);

BinaryReader br=new BinaryReader(fsRead,enc);

nPosInFile=0;

bw.Write(i);

bw.Write(nPosInFile);

m_numFortunes++;

for(;nPosInFile<=fsRead.Length;nPosInFile++)

{

//Parece ser que hay veces que se llega al final del archivo sin haber leído
fsRead.Length caracteres

try

{

ch=br.ReadChar();

}

catch(EndOfStreamException)

{

nPosInFile=(int)fsRead.Length;

bw.Write(i);

bw.Write(nPosInFile);

m_numFortunes++;

ch=' ';

}

//Si es un final

if(ch=='%')

{

//idx.nPosInFile=(int)sr.BaseStream.Position;

bw.Write(i);

bw.Write(nPosInFile);

m_numFortunes++;

}

}

br.Close();

fsRead.Close();

}

Como veréis el encoding con el que leo es el ASCII (que parece que funciona,
aunque en lugar de leer letras con acentos lee cosas raras, pero al menos se
corresponden con lo que quiero (me resulta muy curioso, porque cuando lo
probé hace unos días símplemente se saltaba las letras acentuadas, y ahora
no, quizás se deba al sp1 del net 1.1, o a algo que hacía mal).

Lo curioso es que luego, para leer el texto del fichero (leerlo y
transformarlo), lo hago con UTF7 y se lee bien y en su sitio.

Me gustaría que alguien pudiera explicarme el motivo de este galimatías, o
que ne direccione a una página donde se explique, porque la verdad,
funcionar funciona, pero no sé cómo.

Gracias de antemano.
 

Leer las respuestas

#1 Jose Alfredo
12/09/2004 - 22:09 | Informe spam
Hola!

Te debe leer bien los textos español en UTF-8 también (yo lo tengo así),
claro todo depende de que encoding tengas los archivos de texto, y ahí debe
estar el problema. Fijate que el mismo notepad puedo codificar en ascii
utf-8 y big endian,
Lo que no se como se hace, es como reconocer la codificación desde el
programa. Eso seria bueno cuando uno lee ficheros foraneos, si te enteras de
algo avisanos..

Saludos

Jose Alfredo




"Zephryn Xirdal" schrieb im
Newsbeitrag news:e%
Hola de nuevo, y de nuevo con mi zxFortunes.

He conseguido poder leer bien de un archivo de texto (esto es que me


leyera
las letras acentuadas y que la posición se corresponda con la real dentro
del texto) mediante una lectura con el encoding de UTF7.

Pero entonces, los textos en inglés no se corresponde lo leído con la
posición dentro del texto. En los textos en ingés se leen con UTF8 o


ASCII,
pero entonces los que están en castellano se leen mal.

El código es este:
for(int i=0;i<this.m_numFortuneFiles;i++)

{

System.Text.Encoding enc=System.Text.Encoding.ASCII;

FileStream fsRead=new FileStream(m_fortuneFiles[i],FileMode.Open);

BinaryReader br=new BinaryReader(fsRead,enc);

nPosInFile=0;

bw.Write(i);

bw.Write(nPosInFile);

m_numFortunes++;

for(;nPosInFile<=fsRead.Length;nPosInFile++)

{

//Parece ser que hay veces que se llega al final del archivo sin haber


leído
fsRead.Length caracteres

try

{

ch=br.ReadChar();

}

catch(EndOfStreamException)

{

nPosInFile=(int)fsRead.Length;

bw.Write(i);

bw.Write(nPosInFile);

m_numFortunes++;

ch=' ';

}

//Si es un final

if(ch=='%')

{

//idx.nPosInFile=(int)sr.BaseStream.Position;

bw.Write(i);

bw.Write(nPosInFile);

m_numFortunes++;

}

}

br.Close();

fsRead.Close();

}

Como veréis el encoding con el que leo es el ASCII (que parece que


funciona,
aunque en lugar de leer letras con acentos lee cosas raras, pero al menos


se
corresponden con lo que quiero (me resulta muy curioso, porque cuando lo
probé hace unos días símplemente se saltaba las letras acentuadas, y ahora
no, quizás se deba al sp1 del net 1.1, o a algo que hacía mal).

Lo curioso es que luego, para leer el texto del fichero (leerlo y
transformarlo), lo hago con UTF7 y se lee bien y en su sitio.

Me gustaría que alguien pudiera explicarme el motivo de este galimatías, o
que ne direccione a una página donde se explique, porque la verdad,
funcionar funciona, pero no sé cómo.

Gracias de antemano.






Preguntas similares