Velocity Reviews

Velocity Reviews (
-   C++ (
-   -   locale and wcin, wcout, wfstream (

Ralf Goertz 11-10-2006 09:04 AM

locale and wcin, wcout, wfstream

consider the following program

#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;
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


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


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.