Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Yeiner en 7 Diciembre 2011, 01:36 am



Título: Problema al leer fichero con caracteres especiales
Publicado por: Yeiner en 7 Diciembre 2011, 01:36 am
hola soy nuevo en el foro y tengo este problema como dice el asunto.
debo hacer un programa que lea un fichero y muestre las letras y caracteres usadas en el fichero.

el problema es que al leer el fichero me aparecen otros simbolos en el caso de vocales con tilde el fichero esta en codificacion UTF-8

este es el codigo:

#include <stdio.h>
#include <stdlib.h>

int main()
{
        FILE *archivo;
        char caracter,c[256],p;
   int i,d,cont[256];


   for(i=0;i<=255;i++)
   {
                cont=0;
                c=i;
   }

        archivo = fopen("hola.txt","r");

        if (archivo == NULL)
        {

                printf("\nError de apertura del archivo. \n\n");
        }
        else
        {
                printf("\nEl contenido del texto es \n\n");
                while (feof(archivo) == 0)
                {
                        caracter = fgetc(archivo);
                        d=(int)caracter;
                        printf("%c",caracter);
                        p=d;
                        for(i=0;i<256;i++)
                        {
                                if(caracter==c)
                                {
                                        cont++;
                                }
                        }
                 }
        }

        for(i=0;i<256;i++)
        {
                if(cont>0)
                {
                        printf("%c  %d\n",c,cont);
                }
        }




        getch();
        return 0;
}



y este el contenido del fichero:

Volverán las oscuras golondrinas - Gustavo Adolfo Becquer 
Volverán las oscuras golondrinas
en tu balcón sus nidos a colgar,
y, otra vez, con el ala a sus cristales
jugando llamarán;
pero aquéllas que el vuelo refrenaban           
tu hermosura y mi dicha al contemplar,
aquéllas que aprendieron nuestros nombres...
ésas... ¡no volverán!

Volverán las tupidas madreselvas
de tu jardín las tapias a escalar,               
y otra vez a la tarde, aun más hermosas,
sus flores se abrirán;
pero aquéllas, cuajadas de rocío,
cuyas gotas mirábamos temblar
y caer, como lágrimas del día...                 
ésas... ¡no volverán!

Volverán del amor en tus oídos
las palabras ardientes a sonar;
tu corazón, de su profundo sueño
tal vez despertará;                       

pero mudo y absorto y de rodillas,
como se adora a Dios ante su altar,
como yo te he querido..., desengáñate:
¡así no te querrán!

Síntesis (Las dos cabezas - Guillermo Valencia)
Cuando vio mi poema Jonatás el Rabino
( el espíritu y carne de la bíblica ciencia ),
con la risa en los labios me explicó la sentencia
que soltó la Paloma sobre el Texto divino.

«Nunca pruebes, me dijo, del licor femenino,
que es licor de mandrágoras y destila demencia;
si lo bebes, al punto morirá tu conciencia,
volarán tus canciones, errarás el camino».

Y agregó: «Lo que ahora vas a oír no te asombre:
la mujer es el viejo enemigo del hombre;
sus cabellos de llama son cometas de espanto.

Ella libra la tierra del amante vicioso,
y Ella calma la angustia de su sed de reposo
con el jugo que vierten las heridas del santo».


gracias de antemano con lo que me puedan ayudar

SO: W7
herramienta programacion: borland builder c++ 6.0


Título: Re: Problema al leer fichero con caracteres especiales
Publicado por: x64core en 7 Diciembre 2011, 02:32 am
usar unicode ,pero como decis que compilas con borland, en VS tendrias que usar la funcion: _vsnwprintf()
osea el print en unicode... busca una funcion que podas exporta con borland que muestre cadenas unicode



Título: Re: Problema al leer fichero con caracteres especiales
Publicado por: Lateseles en 10 Diciembre 2011, 05:32 am
No se si te servirá pero en windows al leer de un fichero se guarda los caracteres extendios de ascii con otro valor. las ñ como 241 en vez de 164 por ejemplo.

http://gias720.dis.ulpgc.es/Gias/Cursos/Tutorial_html/formtab.htm#inicio

prueba a usar unsigned char para poder recoger valores superiores a 127. y compara si el caracter es 241 por ejemplo, k lo iguale a 164.