Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   locale and wcin, wcout, wfstream (http://www.velocityreviews.com/forums/t458318-locale-and-wcin-wcout-wfstream.html)

Ralf Goertz 11-10-2006 09:04 AM

locale and wcin, wcout, wfstream
 
Hi,

consider the following program loc.cc

#include <iostream>
#include <fstream>
#include <string>
#include <locale>

using namespace std;

int main(){
char *l=setlocale(LC_ALL,"de_DE.UTF-8");
if (!l) {cerr<<"locale problem"<<endl; return 1;}
wstring w;
wcin>>w;
wostream &outf=wcout; // (*) works
// wofstream outf("xx"); // (**) doesn't work
outf<<w<<L" "<<w.size()<<endl;
return 0;
}


If the program is called with
loc <infile
where infile contains the the UTF-8 encoded line

"The_german_word_for_apples_is_Äpfel"

I get the output

"The_german_word_for_apples_is_Äpfel 35"

However, if the line (*) is commented out and instead the line (**) is
used the file xx is empty. This can be fixed by

outf.imbue(locale("de_DE.UTF-8"));

after the the declaration of outf and before outputting the string. On
the other hand omitting the "setlocale" call and instead imbuing wcin
with the locale directly yields

"The_german_word_for_apples_is_ 30"


This seems a little odd. Does that mean wcin and wcout are locale-aware
after a setlocale call whereas "ordinary" files need an imbue call? If
so why?


All times are GMT. The time now is 04:17 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.