Leer caracteres con tilde y demás

Responder
Irenicus
Mensajes: 1238
Registrado: 19 Mar 2007 23:22

Leer caracteres con tilde y demás

Mensaje por Irenicus »

Buenas,

Quiero hacer un programa que me lea una frase del fichero test.txt, que pueda contener caracteres con tilde y algunos más.

Sé que existe el Ascii-255 (http://www.elcodigoascii.com.ar), el cual contiene los caracteres que necesito pero a partir del 127 hace "overflow" o algo así y no detecta el carácter correcto.

¿Cómo puedo sacarlo del istream, quizá con un string? Si conocéis algún otro método sin usar el búfer también me va bien. ¡Gracias!

Código: Seleccionar todo

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  filebuf fb;
  fb.open ("test.txt",ios::in);
  istream is(&fb);
  is.seekg (0, ios::end);
  int size = is.tellg();
  is.seekg (0, ios::beg);
  char c;
  string s = "";
    
  for (int i = 0; i < size; ++i) {
        c = char(is.get());     // al hacer esta captura no coge la letra con tilde, sólo ASCII 33-126.
                
        if (c >= 'a' and c <= 'z') s += c;
        else if (c >= 'A' and c <= 'Z') s += c - 'A' + 'a';
        else if( .... ) {
 // á à é è í ì ó ò ú ù ü ý    
        }
        else s += " ";
        is.peek();
    }
    cout << endl << s << endl << endl;

  fb.close();
  return 0;
}
Avatar de Usuario
SoTA
Mensajes: 3394
Registrado: 03 Feb 2007 12:25

Re: Leer caracteres con tilde y demás

Mensaje por SoTA »

¿Estás programando en linux o windows?

Leí que la consola de windows usa codificacion unicode y por eso no lee bien los caracteres del ascii extendido.
Irenicus
Mensajes: 1238
Registrado: 19 Mar 2007 23:22

Re: Leer caracteres con tilde y demás

Mensaje por Irenicus »

Se me olvidó ponerlo, programo en Linux. Concretamente:

Editor: gedit
Compilador: g++
SO: Ubuntu 10.04 32 bits

Me ha entrado curiosidad por lo que has dicho y he hecho un programa en Windows que hiciera lo siguiente:

unsigned char c = 129; // produiría overflow en Linux (aunque por teoría no, ya que un unsigned char tiene rango [0..255])
cout << c << endl;

¡Y funciona bien!
¿Cómo puedo arreglar ese error en Linux?

Gracias SoTA.
Avatar de Usuario
SoTA
Mensajes: 3394
Registrado: 03 Feb 2007 12:25

Re: Leer caracteres con tilde y demás

Mensaje por SoTA »

No tengo un linux delante asique te hablo de memoria:

En en el menu de la shell, arriba creo recordar que hay una opcion de codificacion, prueba con utf-8 (creo que se llama así).
Irenicus
Mensajes: 1238
Registrado: 19 Mar 2007 23:22

Re: Leer caracteres con tilde y demás

Mensaje por Irenicus »

¡Maldita sea!

Tienes razón, soy tan tonto que no había pensado en mirar la terminal, estaba mirando el editor de textos o el compilador... :(

Muchas gracias, habiendo hecho el cambio funciona perfecto, aunque tenía UTF-8 y lo he cambiado a Occidental; pero bueno, la idea era esa.

Podría haber estado aquí días, jajaja.
Avatar de Usuario
SoTA
Mensajes: 3394
Registrado: 03 Feb 2007 12:25

Re: Leer caracteres con tilde y demás

Mensaje por SoTA »

xD.

Es lo que tiene la programación tio, a mi me gusta pero me come mucho la cabeza. Este primer cuatrimestre pasado acabé con mi última asignatura de programación y me alegre bastante jeje.
Avatar de Usuario
Xtreme
Mensajes: 1023
Registrado: 13 Dic 2009 23:47
Contactar:

Re: Leer caracteres con tilde y demás

Mensaje por Xtreme »

Yo tengo unas ganas de empezar con C++, ahora ando con la mierda del java xD
[equipo]Sobremesa jugón|Intel Core 2 Q8200 @2.8|Asus Maximus Formula|2x2gb Samsung Drr2 667@800|AMD 6870 xfx OC|||Thermaltake isgc 300||Nox coolbay W|Creative soundblaster|Windows 7 Ultimate|||Logitech g400||[/equipo]
Avatar de Usuario
Igb
Mensajes: 3213
Registrado: 12 Feb 2007 11:45

Re: Leer caracteres con tilde y demás

Mensaje por Igb »

Xtreme escribió:Yo tengo unas ganas de empezar con C++, ahora ando con la mierda del java xD
Jajaja no sabes lo que dices, C++ es tremendamente potente, pero es mucho mas delicado, tienes que gestionar tu mismo los punteros (que muchisimas cosas no hay otra forma de hacerlas), y la sintaxis, sobre todo a la hora de trabajar con clases, es mucho mas rebuscada (solo el hecho de necesitar por cada clase un archivo de cabeceras y otro para la clase en si ya te obliga a escribir el doble que con java), java es mucho mas lógico, mas simple de usar, el mismo lenguaje lo gestiona todo, la herencia parece que la pide, esta todo implementado con punteros pero tu no lo ves... para trabajar en la memoria y tal a bajo nivel puede que sea mas fino c++... pero si me mandan hacer un programa y me dejan elegir, yo para no complicarme la vida no lo dudo un segundo xD

Saludos
Icono de PC  Razgriz Desplegar firma
  • Procesador
    I7 3930K
  • Placa base
    Asus Rampage IV Extreme
  • RAM
    4x4gb G. Skill RipjawsZ 1866 CL9
  • Tarjeta gráfica
    PNY 680 SLI
  • Disco Duro
    Samsung 840 Pro 256Gb
  • Unidad Óptica
    BR Liteon iHBS112
  • Refrigeración
    Exos 2.5+EK Supreme HF
  • Fuente alimentación
    Seasonic Platinum 1000
  • Caja
    NZXT Phantom Negra/Naranja
  • Sonido
    Asus Xonar Phoebus
  • Sistema operativo
    Windows 7 x64
  • Monitor
    BenQ XL2410T
  • Teclado
    Logitech G19
  • Ratón
    Saitek Cyborg MMO7
  • Otros
    WD Caviar Black 2TB
  • Otros
    WD Caviar Green 2TB (Backup)
Ocultar
Imagen
Irenicus
Mensajes: 1238
Registrado: 19 Mar 2007 23:22

Re: Leer caracteres con tilde y demás

Mensaje por Irenicus »

SoTA escribió:xD.

Es lo que tiene la programación tio, a mi me gusta pero me come mucho la cabeza. Este primer cuatrimestre pasado acabé con mi última asignatura de programación y me alegre bastante jeje.
Tienes razón, a veces se da muchas vueltas a una cosa que es una tontería...

Pero a mí me gusta bastante, ya que es algo más práctico que la teoría de computadores y esas cosas.
Avatar de Usuario
Xtreme
Mensajes: 1023
Registrado: 13 Dic 2009 23:47
Contactar:

Re: Leer caracteres con tilde y demás

Mensaje por Xtreme »

Ya, se que en java no tengo que gestionar nada de memoria, pero si necesito algo potente y que gaste pocos recursos ya me puedo ir olvidando
[equipo]Sobremesa jugón|Intel Core 2 Q8200 @2.8|Asus Maximus Formula|2x2gb Samsung Drr2 667@800|AMD 6870 xfx OC|||Thermaltake isgc 300||Nox coolbay W|Creative soundblaster|Windows 7 Ultimate|||Logitech g400||[/equipo]
Responder