Datei einlesen + Character Set ermitteln + Ausgabe UTF-8
-
Hi,
bin relativ neu in dem Thema. Vllt. kann mir ja jemand ein wenig auf die Sprünge helfen.
Ich wollte eine Datei einlesen und dessen Konvertierung erkennen. Anschliessend das ganze zeilenweise ausgeben und vorher nach utf-8 konvertieren.
Ich hatte schon versucht LC_ALL auf UTF-8 zu setzen und dann die jeweilige 'line' über %ls L'line' auszugeben allerdings kam dort eine Warnung und das Script stürzte ab. Wie gesagt bin nicht nicht sehr lange im Thema und über die Glaskoogle bin ich nicht wirklich fündig geworden. Bin für Tipps dankbar :).
abc.txt =>
--------------------------------------------
bla
test lol rofl test c.pp oder sowas ? äöü
sdasd sadasdasdasd dasdsad
dsadasdsad sda
--------------------------------------------#include <stdio.h> #include <locale.h> #include <stddef.h> #define MAX_LINES 80 main() { setlocale(LC_ALL, "de_DE.UTF-8"); // set file-handle FILE* fp; // set max readable lines in char array char line[MAX_LINES]; // set line counter int currentLine=1; // open file-handle in read-only modus fp=fopen("abc.txt","r"); // print file lines and count up till EOF or MAX_LINES reached while (fgets(line, MAX_LINES, fp) != NULL){ printf("Line %d - %s", currentLine, line); currentLine++; } // print short sentance which consist of the count of lines printf("\n\nFile contains %d lines.\n", currentLine-1); // close file-handle fclose(fp); }
Besten Dank
d4rkMouze
-
1. Du kannst bei einer reinen Textdatei die Codierung nicht zuverlässig erkennen. Es gibt Markierungen, mit denen sich feststellen lässt, ob Unicode gespeichert wurde, aber nicht unbedingt, welcher Zeichensatz.
2. Mit L"..." erzeugst Du Wide-Strings. Die haben eine feste Zeichenbreite und sind meist in UCS-2 oder UCS-4 abgelegt, haben aber nichts mit UTF-8 zu tun.
3. Codekonvertierungen bietet C imho nicht an (ausser zwischen dem "lokalen" Narrow-Zeichensatz und dem "lokalen" Wide-Zeichensatz). Schau Dir evtl. mal die Bibliothek iconv an.
-
Ich hatte es anfangs auch mit iconv probiert, aber das hat überhaupt nicht geklappt. Zumal die Funktionen alles andere als intuitiv sind und die Doku eher schlecht als recht ist.
Wenn du damit auch Probleme hast, schau dir MultiByteToWideChar und WideCharToMultiByte an. Damit klappt die Konvertierung bei mir nun wunderbar. Aber dabei musst du auf die WinAPI zurückgreifen. Weiß ja nicht, ob du das willst.
mfg
-
Danke für den Hinweis iconv klappt auch irgendwie nicht. Ich werde mal deinen Tip probieren. Vielen Dank