2009-12-17 4 views
19

Wie finden Sie gültige Locale-Namen?Gültige Gebietsschema-Namen

Ich verwende derzeit MAC OS X.
Aber Informationen über andere Plattformen wären auch nützlich.

#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 Ich reparierte, wo Sie Local für Locale typoiert hatten. Ich nehme an, Sie wissen das wahrscheinlich, aber sie sind anders, und wenn Sie das falsche tippen, könnte es Ihrem googeln weh tun –

Antwort

17

This page says:

Der Konstruktoraufruf std :: locale ("") erzeugt ein locale-Objekt, das die Präferenzen des Benutzers darstellt. Der Standard sagt nicht, was das bedeutet, aber auf vielen Systemen ersetzt die Bibliothek das, was in einer Umgebungsvariablen (oft LANG oder LC_ALL) anstelle der leeren Zeichenfolge gefunden wird. Ein gebräuchlicher Name für das amerikanische Gebietsschema lautet beispielsweise "en_US". (Auf POSIX-Systemen können Sie locale -a geben Sie die Namen der unterstützten Sprachen zur Liste.)

locale -a sollte für Sie arbeiten.

Wenn Sie programmatisch von der C++ - Standardbibliothek sprechen, bin ich mir nicht sicher.

This stack overflow question ist wahrscheinlich auch relevant, aber er scheint nicht viel Antwort zu haben.

bearbeiten

verwenden UTF-16 werden Sie wahrscheinlich libiconv verwenden müssen, wie in this question erwähnt.

+0

Das hat funktioniert: Ich habe en_US.UTF-8 und de_DE.UTF-8. Aber jetzt muss ich eine UTF-16-Datei dekodieren. –

+0

OK, ich habe die Antwort dafür erweitert. Libiconv ist die kurze Antwort, denke ich. –