Zusätzliches unerwünschtes Zeichen in CSV Datei



  • hi,
    ich hab ein Programm geschrieben, das Daten in einer csv Datei speichert.
    http://img5.fotos-hochladen.net/uploads/zeichen1k269aynvb.jpg
    Das zusätzliche Zeichen ist dieses A vor dem °.

    bool CCSVExport::Create(CCutString *CSVDaten)
    {
    	CStdioFileEx CreateFileBB;
    	bool OK;
    	CString sText, semi=_T(";"), neu=_T("\r\n") ;                        //MLHIDE
    	if(OK=CreateFileBB.Open(m_FileString, CFile::modeCreate|CFile::modeWrite))
    	{
    	//	CreateFileBB.SetWriteBOM(true);|CStdioFileEx::modeWriteUnicode
    		CreateFileBB.SetCodePage(65001);
    		Header(&CreateFileBB,CSVDaten);
    		Bezeichnung(&CreateFileBB);
    		Daten(&CreateFileBB,CSVDaten);
    		CreateFileBB.Close();	
    	}	
    	return OK;
    }
    
    void CCSVExport::Bezeichnung(CStdioFileEx *File)
    {
    	CString sText, semi=_T(";"), neu=_T("\r\n");                         //MLHIDE
    	CStringW dummy; 
    
    	//sText=_T("DD.MM.YYYY hh:mm.ss;");                                    //MLHIDE
    	for(int i=0; i<g_DatenObjekt.m_nAnzahlDaten+1; i++)
    	{
    		if (i==0)
    		{
    			sText+=g_DatenObjekt.m_SpaltenNamen.GetAt(i);
    			dummy="";
    		}
    		else
    		{
    			sText+=g_DatenObjekt.m_SpaltenNamen.GetAt(i);
    			dummy=g_DatenObjekt.m_Einheiten.GetAt(i-1);
    		}
    
    		if (dummy==" " || dummy=="")
    		{
    			sText+=semi; //MLHIDE
    		}
    		else
    		{
    			sText+=_T(" ( ") + dummy +_T(" )") + semi; //MLHIDE
    		}
    	}
    	sText+=neu;
    	File->WriteString(sText);
    }
    

    In einer tabelle im programm wird es jedoch korrekt angezeigt
    http://img5.fotos-hochladen.net/uploads/improgh2857jebr0.jpg

    Beide beziehen die bezeichnung aus dem gleichem array
    g_DatenObjekt.m_Einheiten.GetAt(i-1);

    Weis jemand woher der fehler kommt oder kennt tricks diesen fehler zu umgehen ?
    Danke schonmal



  • So wie das aussieht benutzt du falsche Codierungen zw mischt die untereinander.



  • nutze unicode



  • Schau dir die CSV-Datei doch mal in einem HEX-Viewer/Editor an.
    Dann siehst du genau, was an der Stelle steht.



  • das merkwürdige ist auch nur bei dem ° zeichen taucht dieses zusätzliche zeichen auf.
    ebenfalls wird dieses zeichen bei notepad++ nicht angezeigt, nur bei excel.
    Hab mir grad mal ein hex viewer runtergeladen und werde es gleich mal testen.

    Also im Hexiditor wird dieses zeichen auch angzeigt.
    6534202820C2B04320293B54656D7065 - C2 ist der übeltäter, aber wirklich weiter bringt mich das jetzt nicht ^^

    Die frage ist warum wandert es mit rein. Und warum nur bei dem zeichen °.



  • Weil das UTF-8 codiert wurde.
    Das ° liegt oberhalb von 0x80 und gehört somit nicht mehr zum ASCII.
    Mit dem 0xC2 startet eine Zwei-Byte-Sequenz.



  • Ja hab da auch en bissel probleme, bei unicode durchzublicken.
    Heist das, das excell die datei nicht als unicode erkennt und deshalb das zeichen in zwei zeichen aufteilt ?



  • dacown schrieb:

    Heist das, das excell die datei nicht als unicode erkennt und deshalb das zeichen in zwei zeichen aufteilt ?

    Sieht so aus, setz' doch mal versuchsweise ein EFBBBF (BOM) ganz an den Anfang der Datei.



  • Caligulaminus schrieb:

    dacown schrieb:

    Heist das, das excell die datei nicht als unicode erkennt und deshalb das zeichen in zwei zeichen aufteilt ?

    Sieht so aus, setz' doch mal versuchsweise ein EFBBBF (BOM) ganz an den Anfang der Datei.

    Ist schon am Anfang der Datei. Aber trotzdem danke für den tip


Log in to reply