[Megoldva:] ASCII karakterek konvertálása UTF-8 -ra

Fórumok

Sziasztok!

Régi, DOS-ban szerkesztett szöveges fájljaimat szeretném a Linux-os (UBUNTU 8.04) környezetemhez konvertálni.
Írtam hozzá egy kezdetleges progit, de még nem működik. Próbaképpen csak az 'é' betűt konvertálom, de amiatt, hogy az UTF-8 több bájton ábrázolja a magyar ékezetes karaktereket, nem tudom egy sima "char" típusú változóba rakni a karaktert.

Ez a forráskód:


#include <fstream>

using namespace std;

int main() {
    ifstream inFile ("magyar.inc", ios::in | ios::binary);
    ofstream outFile;
    outFile.open ("magyar.txt", ios::out | ios::binary);

    char* ch = new char;

    while(!inFile.eof()  &&  inFile.read(ch, 1)) {
        if (*ch == (char)130) {
            *ch = 'é';
            outFile.write(ch, 1);
        } else {
            outFile.write(ch, 1);
        }
    }

    inFile.close();
    outFile.close();
    delete ch;
}
 

Fordításkor ezeket a figyelmeztetéseket adja a g++ fordító:

warning: multi-character character constant
src/main.cpp: In function ‘int main()’:
src/main.cpp:14: warning: overflow in implicit constant conversion

Hogyan tudnám az "é" betűt a kimeneti fájlban megjeleníteni?

Hozzászólások

Gondolom ASCII helyett ISO-8859-2-t szerettél volna írni. Csak azért, mert az ASCII hét bites, és az UTF-8-ban az első 128 karakter lefedi a teljes ASCII kódtáblát.

Amire szükséged van (ISO-88592 az ugyanaz, mint a latin2):
iconv -f latin2 -t utf8 < régi_fájl > új_fájl

Köszönöm a segítségeteket! Most már alakul.

Javaslom az iconv + dos2unix kombót. Az első a karaktereket, a második a sorvégeket alakítja át. Persze nem szeretném elvenni a kedved a programozástól a világért sem.

Üdv,
Dw.
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."