sonderzeichen in html-format
-
ich habe folgendes programm geschrieben:
#include <stdio.h> #include <stdlib.h> void sonderzeichen(int nchars, char *tag, FILE *ziel) { int i; char zeichen; for(i = 0; i < nchars; i++) { zeichen = tag[i]; putc(zeichen, ziel); } } int main(int argc, char **argv) { FILE *q, *z; int zeichen; if(argc < 3) { printf("Benutzung: %s quelle ziel\n", *argv); return EXIT_FAILURE; } q = fopen(argv[1], "r"); z = fopen(argv[2], "w"); if(q == NULL || z == NULL) { printf("Fehler bei %cffnen einer Datei...\n", 214); return EXIT_FAILURE; } while((zeichen = getc(q)) != EOF) { if(zeichen == '<') sonderzeichen(4, "<", z); else if(zeichen == '>') sonderzeichen(4, ">", z); else if(zeichen == '\"') sonderzeichen(6, """, z); else if(zeichen == '&') sonderzeichen(5, "&", z); else if(zeichen == 'ä') sonderzeichen(6, "ä", z); else if(zeichen == 'Ä') sonderzeichen(6, "Ä", z); else if(zeichen == 'ö') sonderzeichen(6, "ö", z); else if(zeichen == 'Ö') sonderzeichen(6, "Ö", z); else if(zeichen == 'ü') sonderzeichen(6, "ü", z); else if(zeichen == 'Ü') sonderzeichen(6, "Ü", z); else if(zeichen == 'ß') sonderzeichen(6, "ß", z); else putc(zeichen, z); } printf("Text fertig bearbeitet"); return EXIT_SUCCESS; }
allerdings werden die zeichen ä, ü,.... nicht ersetzt, so wie es eig sein sollte. Nur das " wird ersetzt, der rest wird einfach so in die neue datei übertragen. kann mir jemand sagen warum??
-
Du solltest schon die Zeichencodierung der Quelldatei berücksichtigen. Je nach Codierung kann es übrigens auch sein, dass ein Ä gar nicht als einzelnes char codiert wird.
Schon dein "Kunstgriff", um ein Ö auszugeben, sollte dir doch zeigen, dass das nicht so einfach ist.
Du hast übrigens auch längst nicht alle Character Entity References berücksichtigt, da gibt's ein paar mehr.
-
hab jetzt mal die buchstaben als zahlen ausgeben lassen, und damit dann die if anweisungen gefüttert. So funktioniert es jetzt:
#include <stdio.h> #include <stdlib.h> void sonderzeichen(int nchars, char *tag, FILE *ziel) { int i; char zeichen; for(i = 0; i < nchars; i++) { zeichen = tag[i]; putc(zeichen, ziel); } } int main(int argc, char **argv) { FILE *q, *z, *neu; char c; int zeichen; if(argc < 3) { printf("Benutzung: %s quelle ziel\n", *argv); return EXIT_FAILURE; } neu = fopen("normal1.txt", "w"); while((c = getc(stdin)) != '.') putc(c, neu); fclose(neu); q = fopen("normal1.txt", "r"); z = fopen(argv[2], "w"); if(q == NULL || z == NULL) { printf("Fehler bei %cffnen einer Datei...\n", 214); return EXIT_FAILURE; } while((zeichen = getc(q)) != EOF) { //printf("%d", zeichen); um herauszufinden, welche zahl er den buchstagen zuordnet if(zeichen == '<') sonderzeichen(4, "<", z); else if(zeichen == '>') sonderzeichen(4, ">", z); else if(zeichen == '\"') sonderzeichen(6, """, z); else if(zeichen == '&') sonderzeichen(5, "&", z); else if(zeichen == 132) sonderzeichen(6, "ä", z); else if(zeichen == 142) sonderzeichen(6, "Ä", z); else if(zeichen == 148) sonderzeichen(6, "ö", z); else if(zeichen == 153) sonderzeichen(6, "Ö", z); else if(zeichen == 129) sonderzeichen(6, "ü", z); else if(zeichen == 154) sonderzeichen(6, "Ü", z); else if(zeichen == 225) sonderzeichen(6, "ß", z); else putc(zeichen, z); } printf("Text fertig bearbeitet"); return EXIT_SUCCESS; }
allerdings nur wenn ich wie jetzt die datei mit erzeuge, wenn ich eine vorhandene datei umwandeln will, gibt er mir für die eingelesenen buchstaben wieder ganz andere zahlen aus, die aber zu keiner tabelle passen.
die codierung ist doch das mit b und t oder, das ich beim erzeugen un lesen anhängen kann oderß?
wie ist die codierung bei textdateien die ich mit dem editor geschrieben hab?
-
neo47 schrieb:
die codierung ist doch das mit b und t oder, das ich beim erzeugen un lesen anhängen kann oderß?
Nein, das hat damit überhaupt nichts zu tun.
Es gibt sehr viele Möglichkeiten, Texte binär darzustellen.
Eine kleine Auswahl:
http://de.wikipedia.org/wiki/Unicode_Transformation_Format
http://de.wikipedia.org/wiki/ISO_8859
http://de.wikipedia.org/wiki/Extended_Binary_Coded_Decimals_Interchange_Codeneo47 schrieb:
wie ist die codierung bei textdateien die ich mit dem editor geschrieben hab?
Das kommt auf den Editor an. Die meisten unterstützen mehrere Codierungen.
Das Problem ist, dass du im Allgemeinen einer Textdatei nicht ansehen kannst, wie sie codiert ist. Bei UTF kannst du auf ein BOM hoffen, aber das war's dann auch schon.
Wenn du genau weißt, wie deine Quelldateien codiert sind, kannst du dein Programm natürlich genau darauf abstimmen.
Deinen ermittelten Werten nach scheint das bei der Testdatei Codepage 437 zu sein:
http://de.wikipedia.org/wiki/Codepage_437
-
Je nachdem in welcher Kodierung deine Quelldatei vorliegt, musst du sie eventuell konvertieren. Davon abhängig kann ein
setlocale(LC_ALL, "German");
und eventuell auch ein
system("chcp 1252"); // Windows
Dings helfen, wenn du die html Datei testweise mit Wordpad/Notepad erstellst.
Gruß,
B.B.
-
Und natürlich in <head> des ausgelieferten HTML die passende Codierung
einstellen, sonst wird das nix.