std::ifstream ließt nicht vorhandenes 'á'



  • Ich hab mir von hier: http://thefree3dmodels.com/stuff/vehicles/ship_boat/13-1-0-622 ein Boot im obj Dateiformat besorgt. Beim Einlesen der Datei stoße ich auf ein komisches zeichen: 'á' - einfach mal den Code von unten damit laufen lassen - dieses Zeichen taucht aber in der Orginaldatei nicht auf - woher kommt dieses Zeichen? Wenn ich das Array data wieder rausschreibe taucht dort auch nicht das Zeichen 'á' auf.

    #include <iostream>
    #include <cassert>
    #include <vector>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    	std::ifstream infile;
    	infile.open("Ship - boat.obj", std::ios::binary);
    	infile.seekg(0, std::ios::end);
    	size_t file_size_in_byte = infile.tellg();
    	infile.seekg(0, std::ios::beg);
    	std::vector<char> data;
    	data.resize(file_size_in_byte);
    	infile.read(&data[0], file_size_in_byte);
    
    	// Check data
    	for (int i = 0; i < file_size_in_byte; i++)
    	{
    		unsigned char c = data[i];
    
    		if (isdigit(c) || 
    			isalpha(c) ||
    			c == '('   ||
    			c == '_'   ||
    			c == ')'   ||
    			c == '-'   ||
    			c == '+'   ||
    			c == '/'   ||
    			c == '#'   ||
    			c == '.'   ||
    			c == ','   ||
    			c == '\n'  ||
    			c == '\t'  ||
    			c == ' ')
    		{
    			// alles okay...
    		}
    		else
    		{
    			// was für ein komische Zeichen? 
    			std::ofstream outfile("debugobj2.txt");
    			outfile << data[i];
    
    			// davor
    			for (int a = 0; a < 100; a++)
    				outfile << data[i-(100-a+1)];
    
    			for (int a = 0; a < 100; a++)
    				outfile << data[i+a];
    		}
    	}
    
    	return 0;
    }
    

    wenn ich statt

    unsigned char c = data[i];
    

    folgendes verwende:

    char c = data[i];
    

    erhalte ich eine felgeschlagen Assertion in isdigit() - warum ist das so?



  • Agin34 schrieb:

    Ich hab mir von hier: http://thefree3dmodels.com/stuff/vehicles/ship_boat/13-1-0-622 ein Boot im obj Dateiformat besorgt. Beim Einlesen der Datei stoße ich auf ein komisches zeichen: 'á' - einfach mal den Code von unten damit laufen lassen - dieses Zeichen taucht aber in der Orginaldatei nicht auf - woher kommt dieses Zeichen? Wenn ich das Array data wieder rausschreibe taucht dort auch nicht das Zeichen 'á' auf.

    Oje...ich leide unter Langeweile heute... 😞

    Schau Dir mal Zeile 103991 Deiner .obj Datei an, da ist Kauderwelsch...



  • oh... tatsächlich ....


Anmelden zum Antworten