This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/15733] getline(wifstream, wstring) seems to be broken with UTF-8
- From: "pcarlini at suse dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 30 May 2004 14:26:04 -0000
- Subject: [Bug libstdc++/15733] getline(wifstream, wstring) seems to be broken with UTF-8
- References: <20040530135122.15733.ahlgren@lysator.liu.se>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From pcarlini at suse dot de 2004-05-30 14:26 -------
> Oh, does that explain why I need 'setenv(LC_ALL, "")' to make the output work
> with wcin/wcout? Removing that line will cripple the output with wcin/wcout.
> On the other hand, removing the imbue calls doesn't affect anything, but this
> should be fixed by calling sync_with_stdio(false), did I get it right?
Basically, yes.
>Yes things work fine adding 'fin.imbue(loc);'
>Thanks. The reason for not trying this is that the only call that actually sets
>the proper locale is 'setlocale(LC_ALL, "")' so far, but that was apparently as
>misunderstanding :-(
Yes. You can think of 'setlocale(LC_ALL, "")' as the 'C', not the 'C++' way
to deal with localization. In C++, every different converting stream (i.e.,
fstream, basically or the predefined but only if un-synced, which leads to
fstream under the hood anyway) has its own locale used for doing conversions:
you may have thousands of those, each one different, at the same time. You
select each locale via 'imbue'.
Notice that my explanation above is simplified and rough. In order to know
the details I suggest a good book, such as Langer & Kreft.
Thanks.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |RESOLVED
Resolution| |INVALID
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15733