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@xxxxxxx> 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@xxxxxxx> 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.