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