This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: output unicode


On 27 June 2011 23:07, eric wrote:
> On Mon, 2011-06-27 at 22:31 +0100, Jonathan Wakely wrote:
>> On 27 June 2011 21:57, eric <fsshl@att.net> wrote:
>> > On Mon, 2011-06-27 at 18:28 +0100, Jonathan Wakely wrote:
>> >> On 27 June 2011 17:35, eric wrote:
>> >> > On Mon, 2011-06-27 at 17:03 +0100, Jonathan Wakely wrote:
>> >> >> On 27 June 2011 16:39, eric <fsshl@att.net> wrote:
>> >> >> > Dear advanced c/g++ programers:
>> >> >> > ?after I copied and compiled last email's code
>> >> >> > ?I tested it, with your suggestion (put POSIX and C behind it), they
>> >> >> > run (generate locale),
>> >> >> > but
>> >> >> > all test failed to make output file with size > 0
>> >> >> > so if you can plz help again, and thank a lot in advance, Eric
>> >> >> >
>> >> >> > ------------------------------------------------------------
>> >> >> > eric@eric-laptop:~/cppcookbook$ ./a.out
>> >> >> > trying to access locale el_GR.utf8
>> >> >> > Couldn't generate locale el_GR.utf8: locale::facet::_S_create_c_locale
>> >> >> > name not valid
>> >> >> > Error when writing to file
>> >> >>
>> >> >> As shown by 'locale -a' you don't have the el_GR.utf8 locale
>> >> >> installed, so obviously this won't work.
>> >> >>
>> >> >> > eric@eric-laptop:~/cppcookbook$ ls -l -a unicode.txt
>> >> >> > -rw-r--r-- 1 eric eric 0 2011-06-27 08:31 unicode.txt
>> >> >> > eric@eric-laptop:~/cppcookbook$ ./a.out POSIX
>> >> >> > trying to access locale POSIX
>> >> >> > Generated locale C
>> >> >> > Error when writing to file
>> >> >> > eric@eric-laptop:~/cppcookbook$ ./a.out C
>> >> >> > trying to access locale C
>> >> >> > Generated locale C
>> >> >> > Error when writing to file
>> >> >> > eric@eric-laptop:~/cppcookbook$ ./a.out B
>> >> >> > trying to access locale B
>> >> >> > Couldn't generate locale B: locale::facet::_S_create_c_locale name not
>> >> >> > valid
>> >> >> > Error when writing to file
>> >> >> > eric@eric-laptop:~/cppcookbook$
>> >> >> > -------------------------------------------------------
>> >> >>
>> >> >>
>> >> >> Did you ever answer the question of which OS you're using?
>> >> >>
>> >> >> Your gcc is using --enable-clocale=generic so doesn't support named
>> >> >> locales in the C++ library.
>> >> >>
>> >> >> You could try running your code with a different global locale, i.e.
>> >> >>
>> >> >> LANG=en_US.utf8 ./a.out
>> >> > ----------------------------------------------------------------
>> >> > thanks your suggestion,
>> >> > here is the result of my test on your suggestion and what kind of I use
>> >> > ----
>> >> > eric@eric-laptop:~/cppcookbook$ LANG=en_US.utf8 ./a.out
>> >> > trying to access locale el_GR.utf8
>> >> > Couldn't generate locale el_GR.utf8: locale::facet::_S_create_c_locale
>> >> > name not valid
>> >> > Error when writing to file
>> >> > eric@eric-laptop:~/cppcookbook$ uname -r
>> >> > 2.6.35-25-generic
>> >> > eric@eric-laptop:~/cppcookbook$
>> >> > (Ubuntu/linux 10.04 upgrade kernel to 2.6.35-25)
>> >>
>> >> Your GCC seems to be using --enable-clocale=generic on GNU/Linux,
>> >> which makes no sense.
>> >>
>> >> What does 'gcc -v' print?
>> >>
>> >> > I also modify from el_GR to en_US in en_US.utf8
>> >> > then ./a.out (or LANG=en_US.utf8 ./a.out ? ? ? ? ?, same error)
>> >> > trying to access locale en_US.utf8
>> >> > Couldn't generate locale en_US.utf8: locale::facet::_S_create_c_locale
>> >> > name not valid
>> >> > Error when writing to file
>> >>
>> >> This will not work, you cannot load any named locale with your version of gcc.
>> >>
>> >> My suggestion is to run the original program to write unicode to file
>> >> (not this test program) with LANG=en_US.utf8
>> > ----------------------------------------------------------
>> > eric@eric-laptop:~/cppcookbook$ gcc -v
>> > Using built-in specs.
>> > COLLECT_GCC=gcc
>> > COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.5.2/lto-wrapper
>> > Target: i686-pc-linux-gnu
>> > Configured with: ./configure
>> > Thread model: posix
>> > gcc version 4.5.2 (GCC)
>> > eric@eric-laptop:~/cppcookbook$
>> > -----------------------------------------------------------------
>> > there indeed is another way to write unicode to outfile in my current g
>> > ++(similar as vc++ 2005),
>> > but I like to know why
>> > outfile << ws2 << endl;
>> >
>> > which according to book work in CodeWarrior, can not work in my system
>> > (gcc/g++/linux)?(file length 0 or show 0 at outfile.good())
>>
>> Because your locale isn't set appropriately,
>
> ?How to make my system's local set appropriately?
>
>
>
>> ?and you don't seem to be
>> able to make it use a named locale.
>
> And Make my system to use named locale?

You need to configure gcc with --enable-clocale=gnu and reinstall it.

That should be the default on GNU/Linux but apparently your system is
missing something necessary to support named locales.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]