Título: Error con "fstream" ingresando strings de palabras con tildes Publicado por: FrnkdOU en 30 Mayo 2020, 20:52 pm Buenas! Tengo una duda que si me pueden ayudar estaría totalmente agradecido.
Este es el asunto, al ingresar un archivo con "fstream", ejemplo: en el archivo "palabras.txt" se encuentra la palabra "argón" la cual con el "fstream" es almacenada en una variable. Pero al mostrarla en pantalla algo así: "Argón". Esto sucede a pesar de tener la librería "locale.h" y poner setlocale(LC_ALL, "Spanish"); en el main. Título: Re: Error con "fstream" ingresando strings de palabras con tildes Publicado por: @XSStringManolo en 30 Mayo 2020, 22:02 pm Código
Añádele la codificación al archivo. Título: Re: Error con "fstream" ingresando strings de palabras con tildes Publicado por: EdePC en 31 Mayo 2020, 00:22 am Saludos,
- Tienes que buscar la compatibilidad de codificación entre el fichero de código fuente y la terminal de destino. - Por ejemplo la codificación de caracteres de CMD es OEM (CP-850) para sistemas Windows Español. Esto significa que si guardas tu .cpp y/o ficheros con contenido bajo esa codificación no deberías de tener ningún problema ni tendrías que importar ninguna biblioteca externa (<locale.h>). - En este ejemplo voy a utilizar Notepad3 el cual me permite elegir entre muchas codificaciones, dentro de las cuales está OEM CP-850 que es la que utiliza CMD por defecto en Español: Citar C:\Users\EdSon\Desktop>type lecto_escritura.cpp #include <iostream> #include <fstream> using namespace std; int main() { ofstream salida; ifstream entrada; salida.open("file.txt"); salida << "ñandú"; salida.close(); string txt; entrada.open("file.txt"); entrada >> txt; entrada.close(); cout << txt; return 0; } C:\Users\EdSon\Desktop>g++ lecto_escritura.cpp -o lecto_escritura.exe && lecto_escritura.exe ñandú C:\Users\EdSon\Desktop>type file.txt ñandú -- Nótese que la consola me muestra correctamente la ñ y ú cuando leo los archivos con type, esto porque están guardados bajo la codificación OEM CP-850 y CMD no tiene problema en leerlos e interpretarlos. - PERO esa codificación no es estándar, es más SublimeText no la trae, y Notepad++ no la detecta automáticamente XD. Entonces se puede hacer uso de <locale.h> para adaptarse a la codificación destino utilizando una codificación más estándar. Pero en caso de CMD no se puede usar UTF-8 que es el estándar actual, CMD no la soporta completa, CMD a lo sumo solo soporta ANSI. -- La mejor alternativa parece ser ANSI (CP-1252), este es bastante estándar. Entonces sigo con el ejemplo, en este caso guardo mi archivo .cpp bajo la codificación ANSI o CP-1252 o Windows 1252 o como lo tenga definido el editor de texto: Citar C:\Users\EdSon\Desktop>type lecto_escritura.cpp #include <iostream> #include <fstream> #include <locale> using namespace std; int main() { setlocale(LC_ALL, "Spanish"); ofstream salida; ifstream entrada; salida.open("file.txt"); salida << "±and·"; salida.close(); string txt; entrada.open("file.txt"); entrada >> txt; entrada.close(); cout << txt; return 0; } C:\Users\EdSon\Desktop>g++ lecto_escritura.cpp -o lecto_escritura.exe && lecto_escritura.exe ñandú C:\Users\EdSon\Desktop>type file.txt ±and· -- Nótese que type me muestra caracteres extraños para ñandú pero al compilar y ejecutar el programa no hay problemas para mostrar correctamente ñandú |