CGI und Umlaute
-
Guten Morgen zusammen,
ich habe ein kleines Problem. Ich habe mit C++ eine kleine CGI Anwendung gebaut die mit, was auch sonst, HTML ausgibt.
locale::global(locale("German_germany")); std::wcout << "Content-type: text/html;charset=utf-8" << endl << endl; string ausgabe("<!DOCTYPE html>"); ausgabe.append("<html lang=\"de\">"); ausgabe.append("<head>"); ausgabe.append("<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>"); ausgabe.append("</head>"); ausgabe.append("<body>"); ausgabe.append("Fehler: Regulärer Ausdruck konnte nicht aufgelöst werden"); ausgabe.append("</body>"); ausgabe.append("</html>"); std::wcout << ausgabe.c_str(); return;
Problem ist, dass im FF und Chrome(wie es mit anderen Browser ist weiß ich nicht aber der Fokus liegt auf Chrome) die Umlaute nicht korrekt dargestellt werden. Auf der Console werden sie jedoch ohne Probleme angezeigt. Hat jemand eine Ahnung woran das liegt?
-
Speicherst du die Datei auch korrekt als UTF8?
Du verwendest string statt wstring. Das deutet für mich auf ein nein hin.
Am besten du lädst die Datei herunter und schaust per hexeditor nach ob die Umlaute korrekt sind.
-
Warum baust Du erst einen String zusammen, um ihn in einen c-string umzuwandeln, den Du dann ausgibst? Einfacher wäre es einfach in den Stream das auszugeben, was Du auszugeben hast. Also etwa so:
std::cout << "Content-type: text/html;charset=utf-8\n\n" << "<!DOCTYPE html>" << "<html lang=\"de\">" << "<head>"; // ... usw
Und wenn Du dann ein Umlaut in utf-8 ausgibst, dann geht das am sichersten mit:
std::cout << "Regul\xa4\x0rer Ausdruck";
Ansonsten muss Du tatsächlich sicher stellen, dass Deine Source als UTF-8 gespeichert ist.