Unicode string
eric
fsshl@att.net
Mon Jun 27 09:20:00 GMT 2011
On Sun, 2011-06-26 at 16:52 +0200, Axel Freyn wrote:
> Hi Eric,
>
> On Sun, Jun 26, 2011 at 07:15:54AM -0700, eric wrote:
> > Dear c/g++ advanced programers:
> > I copied and tried to test a piece simple code which is used for
> > (Hardcoding a Unicode String) from the book (
> > C++ Cookbook) by D. Ryan Stephens, Christopher Diggins, Jonathan
> > Turkanis, and Jeff Cogswell
> > at Chapter 13, Internationalization, section 1: Hardcoding a Unicode
> > String
> > example 13-1, it can compile and run on my g++4.5.2, but I don't quite
> > satisfy its result
> >
> > --------------------
> > //Example 13-1 Hardcoding a Unicode string
> > #include <iostream>
> > #include <fstream>
> > #include <string>
> >
> > using namespace std;
> >
> > int main() {
> >
> > // Create some strings with Unicode characters
> > wstring ws1 = L"Infinity: \u221E";
> > wstring ws2 = L"Euro: \u0128";
> >
> > wchar_t w[] = L"Infinity: \u221E";
> >
> > wofstream out("tmp\\unicode.txt");
> > out << ws2 << endl;
> > wcout << ws2 << endl;
> > }
> As far as I know, you should absolutely NOT use non-ascii characters in
> input/output operations without explicitely specifying the
> encoding/localization to be used.
> In your example, I would thus propose to add after the "wofstream
> out..." a line like
> out.imbue(locale("de_DE.UTF-8"));
> which defines the encoding.
> The following works for me:
>
> #include <iostream>
> #include <fstream>
> #include <string>
> using namespace std;
> int main() {
> wstring ws2 = L"Euro:\x20ac";
> wofstream out("unicode.txt");
> out.imbue(locale("de_DE.UTF-8"));
> out << ws2<< endl;
> }
>
> (besides, the Euro-symbol in Unicode is \x20ac)
>
>
> In addition, you SHOULD add error-checking to your code. If you add
> if(not out.good())
> cerr << "Error while writing " << endl;
> AFTER the line which writes into the file, you'll get an error message ....
>
> HTH,
>
> Axel
>
---------------------------
Dear Axel:
Thanks your reply.
I copied your code and tried on my system. It compile and run, but
reponse by
---------------------------
root@eric-laptop:/home/eric/cppcookbook# ./a.out
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Aborted
--------
Do you konw what can be improved more?
looking to see your(or any advancer's) suggestion again, thanks a lot
in advance, Eric
More information about the Gcc-help
mailing list