español c++ unicode utf-8 locale

setlocale c++ español



¿Cuál es el equivalente de Windows para la configuración regional en_US.UTF-8? (3)

Si quiero hacer el siguiente trabajo en Windows, ¿cuál es la configuración regional correcta y cómo detecto que está realmente presente? ¿Funciona este código de manera universal o es solo mi sistema?


Por MSDN , se llamaría "english_us.65001". Pero la página de códigos 65001 es algo escamosa en Windows.


Aunque no existe un buen soporte para las configuraciones regionales con nombre, Visual Studio 2010 incluye las facetas de conversión UTF-8 requeridas por C ++ 11: std::codecvt_utf8 para UCS2 y std::codecvt_utf8_utf16 para UTF-16:

#include <fstream> #include <iostream> #include <string> #include <locale> #include <codecvt> 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<wchar_t>)); 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<wchar_t>)); 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(); }

esta salidas, en mi 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 . . .