2009-12-17 10 views
19

Jak znaleźć prawidłowe nazwy ustawień regionalnych?Poprawne nazwy regionalne

Obecnie korzystam z systemu MAC OS X.
Ale informacje o innych platformach również byłyby przydatne.

#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 Naprawiłem miejsce, w którym pisałeś "Lokalnie" dla Locale. Chyba prawdopodobnie to wiesz, ale są one różne, a jeśli pisałeś niewłaściwą, mogło to zranić twoje logowanie do Google'a. –

Odpowiedz

17

This page says:

SDT wywołanie konstruktora :: locale ("") tworzy obiekt lokalizacji, który reprezentuje preferencje użytkownika. Standard nie mówi, co to oznacza, ale w wielu systemach biblioteka zastępuje wszystko, co znajduje się w zmiennej środowiskowej (często LANG lub LC_ALL) w miejscu pustego łańcucha. Na przykład popularną nazwą amerykańskiego ustawienia narodowego jest "en_US". (W systemach POSIX można wpisać locale -a do listy nazw obsługiwanych lokalizacji.)

locale -a powinny pracować dla Ciebie.

Jeśli masz na myśli programowanie z biblioteki C++ std, nie jestem pewien.

This stack overflow question jest prawdopodobnie również istotna, ale wydaje się, że nie miał dużej odpowiedzi.

Edit

Aby użyć UTF-16 prawdopodobnie będzie trzeba użyć libiconv jak wspomniano w this question.

+0

To zadziałało: Mam en_US.UTF-8 i en_GB.UTF-8. Ale teraz muszę zdekodować plik UTF-16. –

+0

OK, przedłużam odpowiedź na to. libiconv to krótka odpowiedź, którą myślę. –

Powiązane problemy