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

 ( pelz | 2008. szeptember 13., szombat - 17:33 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

> nem tudom egy sima "char" típusú változóba rakni a karaktert.

Akkor rakd többe.

Egyébként: http://billposer.org/Software/uni2ascii.html#related

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

Igyvan.

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."

Azt nehéz lesz elvenni. Kösz!

iconv-nak van libje is, a dos2unix -ot meg programbol nagyon konnyu megvalositani: a \r karaktert kell irtani.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Kösz!

Remélem dokumentációja is van.

Ha mas nem, a /usr/include/iconv.h nagyon hasznos olvasmany... :)
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.