Qual è l’equivalente di Windows per le impostazioni locali di en_US.UTF-8?

Se voglio fare il seguente lavoro su Windows, qual è la localizzazione corretta e come faccio a rilevare che è effettivamente presente: questo codice funziona in modo universale, o è solo il mio sistema?

Fondamentalmente, sei sfortunato: http://www.siao2.com/2007/01/03/1392379.aspx

Sebbene non vi sia un buon supporto per i nomi locali, Visual Studio 2010 include gli aspetti di conversione UTF-8 richiesti da C ++ 11: std::codecvt_utf8 per UCS2 e std::codecvt_utf8_utf16 per UTF-16:

 #include  #include  #include  #include  #include  void prepare_file() { // UTF-8 data char utf8[] = {'\x7a', // latin small letter 'z' U+007a '\xe6','\xb0','\xb4', // CJK ideograph "water" U+6c34 '\xf0','\x9d','\x84','\x8b'}; // musical sign segno U+1d10b std::ofstream fout("text.txt"); fout.write(utf8, sizeof utf8); } void test_file_utf16() { std::wifstream fin("text.txt"); fin.imbue(std::locale(fin.getloc(), new std::codecvt_utf8_utf16)); std::cout << "Read from file using UTF-8/UTF-16 codecvt\n"; for(wchar_t c; fin >> c; ) std::cout << std::hex << std::showbase << c << '\n'; } void test_file_ucs2() { std::wifstream fin("text.txt"); fin.imbue(std::locale(fin.getloc(), new std::codecvt_utf8)); std::cout << "Read from file using UTF-8/UCS2 codecvt\n"; for(wchar_t c; fin >> c; ) std::cout << std::hex << std::showbase << c << '\n'; } int main() { prepare_file(); test_file_utf16(); test_file_ucs2(); } 

questo output, sul mio Visual Studio 2010 EE SP1

 Read from file using UTF-8/UTF-16 codecvt 0x7a 0x6c34 0xd834 0xdd0b Read from file using UTF-8/UCS2 codecvt 0x7a 0x6c34 0xd10b Press any key to continue . . . 

Per MSDN , sarebbe denominato “inglese_us.65001”. Ma la pagina di codice 65001 è piuttosto instabile su Windows.