codecvt



  • hola

    von wo wird eigendlich codecvt aufgerufen bzw. verwendet ? wird es auch von istreambuf_iterator verwendet ? oder nur von der stream-klasse ?

    wie koennte man ein codecvt-facet erstellen das html-entities convertiert ?

    Meep Meep



  • Hallo Meep Meep

    Meep Meep schrieb:

    von wo wird eigendlich codecvt aufgerufen bzw. verwendet ? wird es auch von istreambuf_iterator verwendet ? oder nur von der stream-klasse ?

    weder noch sondern vom std::streambuf, bzw. eines seiner Derivate insbesondere std::basic_filebuf

    Meep Meep schrieb:

    wie koennte man ein codecvt-facet erstellen das html-entities convertiert ?

    wohl eher gar nicht, weil das nicht die Funktion von std::codecvt ist.

    C++ Reference schrieb:

    The codecvt standard facet is used to translate between different character encoding systems (such as multi-byte, UTF-16, ...)

    html-entiteis sind kein character encoding - oder?

    Gruß
    Werner



  • oder nur von der stream-klasse ?

    Es wird (wie Werner schon erwähnte) bspw. genutzt, um zwischen dem Multibyte-Encoding des externen "Geräts" und dem Wide-Character Encoding der internen Repräsentation zu konvertieren. Das ganze geschieht dann je nach Konvertierung auch state-dependent.

    html-entiteis sind kein character encoding - oder?

    Korrigiere mich bitte, aber ist es nicht gerade so ein Anwendungsfall? Mit einem speziellen state-Typ ginge das doch, oder nicht? (Das ganze wäre dann: Konvertierung von einem Encoding in das selbe Encoding und Ersetzung der Entities durch ihre äquivalenten Zeichen im Code).



  • wenn ich also einen parser schreibe der nur istreambuf_iteratoren verwendet, kann mit jeglichem stream umgehen ohne auf UTF8 oder aehnliches zu achten? ich brauch dann nur codecvt-utf8 oder aehnliches dem stream geben ?

    Meep Meep



  • Sone schrieb:

    html-entiteis sind kein character encoding - oder?

    Korrigiere mich bitte, aber ist es nicht gerade so ein Anwendungsfall? Mit einem speziellen state-Typ ginge das doch, oder nicht? (Das ganze wäre dann: Konvertierung von einem Encoding in das selbe Encoding und Ersetzung der Entities durch ihre äquivalenten Zeichen im Code).

    Ein Missverständnis! Es kommt natürlich darauf an, was man unter "html-entities" versteht. "html-entities" sind diese ' ¨ ' oder ' θ ' - ja dann kann tatsächlich std::codecvt das Mittel der Wahl sein. Ich hatte an was anderes gedacht.

    Meep Meep schrieb:

    wenn ich also einen parser schreibe der nur istreambuf_iteratoren verwendet, kann mit jeglichem stream umgehen ohne auf UTF8 oder aehnliches zu achten? ich brauch dann nur codecvt-utf8 oder aehnliches dem stream geben ?

    Im Prinzip ja - in der Praxis würde ich es immer vorher auch ausprobieren, da dummerweise nicht alle Implementierungen der std::basic_streambuf<> -Derivate eine codecvt-Facette berücksichtigen. Z.B. std::basic_stringbuf<> tut das unter VC10 meines Wissens nicht; der Standard sieht das hier auch nicht vor.
    Bei std::basic_filebuf<> dagegen sollte es funktionieren.

    Gruß
    Werner


Anmelden zum Antworten