locale lUTF(locale(),new utf8_codecvt_facet());
ifstream in;
in.imbue(lUTF);
Aber wie mache ich das mit cp1252?
Danke fᅵr Hinweise
Michael
--
Remove the sport from my address to obtain email
www.enertex.de - Innovative Systemlᅵsungen der Energie- und Elektrotechnik
> locale lUTF(locale(),new utf8_codecvt_facet());
> ifstream in;
> in.imbue(lUTF);
>
> Aber wie mache ich das mit cp1252?
> Danke fᅵr Hinweise
Ich glaube nicht, dass cp1252 irgendwo im C++ Standard vorkommt, deswegen
denke ich, dass es mit ISO C++ nicht gehen wird.
Ideen es trotzdem zu lᅵsen wᅵren:
Mit glib: Glib::convert(_stream.str(), "CP1252", "UTF-8");
ICU, bzw. das Binding Boost::Locale (siehe "Code-page conversions"
http://cppcms.sourceforge.net/boost_locale/docs/index.html).
Oder kannst du dir deine Locale auf etwas was cp1252 verwendet umstellen?
mfg Markus
--
http://www.markus-raab.org | Demokratie ist Diskussion. -- Th. G.
-o) | Masaryk
Kernel 2.6.24-1-a /\ |
on a x86_64 _\_v |
> > Aber wie mache ich das mit cp1252?
> > Danke für Hinweise
> Ich glaube nicht, dass cp1252 irgendwo im C++ Standard
> vorkommt, deswegen denke ich, dass es mit ISO C++ nicht gehen
> wird.
UTF-8 kommt auch im aktuellen Standard nicht vor. C++ bietet
standardmäßig keine Unterstützung bestimmter Kodierungen an. Nur
ein Framework, die für alle mehr oder weniger gehen soll, das
die Implementierung unterstützen will.
Wahrscheinlich muss er mit wchar_t arbeiten; CP1252 ist eine
Einzelbyte-Kodierung, und die Locale für Einzelbyte-Kodierungen
gehen fast immer davon aus, dass dieselbe Kodierung intern für
char benutzt wird, und machen keine Umwandlung
(codecvt<char>::always_noconv() liefert true zurück).
> Ideen es trotzdem zu lösen wären:
> Mit glib: Glib::convert(_stream.str(), "CP1252", "UTF-8");
> ICU, bzw. das Binding Boost::Locale (siehe "Code-page
> conversions"http://cppcms.sourceforge.net/boost_locale/docs/index.html).
In anderen Worten, Boost bietet Locale an, die sich auf
Glib::convert basieren. Eine sehr nette Lösung.
> Oder kannst du dir deine Locale auf etwas was cp1252 verwendet
> umstellen?
Ob der benötige Locale auf seinem Rechner vorhanden ist, und wie
es heißt, und wenn nicht, woher er ihn bekommen kann, sind die
richtigen Fragen. Unter Windows hat er ihn ("German_Germany.1252",
oder so was ähnlich). Under Unix wäre der Name "de_DE.1252",
oder etwas ähnlich; ich habe ihn aber unter Unix nie gesehen
(freilich aber auch nie gesucht). Amsonsten gibt es Boost, und
vielleicht auch andere. (Auch: CP 1252 ist ISO 8859-1 sehr
ähnlich. Möglicherweise kommt er zurecht mit "de_DE.iso8859-1".
Falls keine Euro-Zeichen vorkommt, mindestens.)
--
James Kanze
> Ich mᅵchte eine Ausgabestream in ein anderes Systemcoding umwandeln. Mein
> System (linux, gcc) liest uft-8 aber ich mᅵchte cp1252 erzeugen.
> Ich wollte das mit der boost bzw mit imbue des Streams machen, aber so
> recht weiss ich nicht, wie ich auf ein Set fᅵr die cp1252
> So geht das ja im Prinzip:
>
> locale lUTF(locale(),new utf8_codecvt_facet());
> ifstream in;
> in.imbue(lUTF);
>
> Aber wie mache ich das mit cp1252?
Direkte Hilfe kann ich nicht bieten, aber schau Dir mal den Sourcecode
von 'iconv' an, das kann auch CP1252 ( jedenfalls bei mir unter
Centos 5.2: 'iiconf --list' zeigt alle interstᅵtzen Codings).
Tschau
Andreas
--
Andreas Hᅵnnebeck | email: ac...@gmx.de
----- privat ---- | www : http://www.huennebeck-online.de
Fax/Anrufbeantworter: 0721/151-284301
GPG-Key: http://www.huennebeck-online.de/public_keys/andreas.asc
PGP-Key: http://www.huennebeck-online.de/public_keys/pgp_andreas.asc
James Kanze wrote:
>> Mit glib: Glib::convert(_stream.str(), "CP1252", "UTF-8");
>
>> ICU, bzw. das Binding Boost::Locale (siehe "Code-page
>> conversions"http://cppcms.sourceforge.net/boost_locale/docs/index.html).
>
> In anderen Worten, Boost bietet Locale an, die sich auf
> Glib::convert basieren. ᅵEine sehr nette Lᅵsung.
Das war vielleicht unklar ausgedrᅵckt, ich habe zwei verschiedene Lᅵsungen
beschrieben:
1.) glibmm, welches Glib verwendet
2.) boost::locale, welches ICU verwendet
mfg Markus
--
http://www.markus-raab.org | "wenn sich die farben irgendwo brechen,
-o) | dann brechen sie sich eben und irgendwann
Kernel 2.6.24-1-a /\ | koen sie in die ozschicht, wo das licht
on a x86_64 _\_v | blau wird" -- Barbara