By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,602 Members | 1,466 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,602 IT Pros & Developers. It's quick & easy.

locale and wcin, wcout, wfstream

P: n/a

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?
Nov 10 '06 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.