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 . . .
Básicamente, no tienes suerte: http://www.siao2.com/2007/01/03/1392379.aspx