2009-12-17 7 views
19

Comment trouver des noms de paramètres régionaux valides? J'utilise actuellement MAC OS X.
Mais des informations sur d'autres plates-formes seraient également utiles.Noms de paramètres régionaux valides

#include <fstream> 
#include <iostream> 


int main(int argc,char* argv[]) 
{ 
    try 
    { 
     std::wifstream data; 
     data.imbue(std::locale("en_US.UTF-16")); 
     data.open("Plop"); 
    } 
    catch(std::exception const& e) 
    { 
     std::cout << "Exception: " << e.what() << "\n"; 
     throw; 
    } 
} 

% g++ main.cpp 
% ./a.out 
Exception: locale::facet::_S_create_c_locale name not valid 
Abort 
+0

Martin J'ai corrigé l'erreur de localisation locale pour les paramètres régionaux. Je suppose que vous le savez probablement, mais ils sont différents, et si vous tapiez le mauvais, il pourrait avoir blessé votre googling –

Répondre

17

This page says:

L'appel constructeur std :: locale ("") crée un objet locale qui représente les préférences de l'utilisateur. La norme ne dit pas ce que cela signifie, mais sur de nombreux systèmes, la bibliothèque remplace tout ce qui se trouve dans une variable d'environnement (souvent LANG ou LC_ALL) à la place de la chaîne vide. Un nom commun pour l'environnement local américain, par exemple, est "en_US". (Sur les systèmes POSIX, vous pouvez taper locale -a à la liste les noms des lieux pris en charge.)

locale -a devrait travailler pour vous.

Si vous voulez dire par programme de la librairie std C++ je ne suis pas sûr.

This stack overflow question est probablement aussi pertinent, mais il ne semble pas avoir eu beaucoup de réponse.

Modifier

Pour utiliser UTF-16 vous aurez probablement besoin d'utiliser libiconv comme mentionné dans this question.

+0

Cela a fonctionné: J'ai en_US.UTF-8 et en_GB.UTF-8. Mais maintenant je dois décoder un fichier UTF-16. –

+0

OK, j'ai étendu la réponse pour cela. libiconv est la réponse courte je pense. –

Questions connexes