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.
Beistd::basic_filebuf<>
dagegen sollte es funktionieren.Gruß
Werner