¿Es posible coutear un EM DASH en Linux y Windows? (C ++)

No he podido encontrar una manera de cout un carácter ‘-‘, ya sea que lo coloque en la statement cout de esta manera: cout << "—"; o utilice char(151) , el progtwig imprime un carácter indefinido difuso. ¿Ves algo malo con mi código? ¿Es posible encontrar un EM DASH?

Edición: También he intentado wcout << L"—"; y std::wcout << wchar_t(0x2014); . Los dos no imprimen nada en mi terminal.

En primer lugar, EM DASH es un personaje de Unicode (solo asegurándose de que lo sepa).

La impresión de caracteres Unicode depende de lo que está imprimiendo. Si está imprimiendo en un terminal Unix (o un emulador), el emulador de terminal está utilizando una encoding que admite este carácter, y esa encoding coincide con la encoding de ejecución del comstackdor, entonces puede hacer lo que acaba de hacer en su código fuente. cout << "—";

Si está obteniendo caracteres no definidos difusos, es posible que su terminal simplemente no admita ese carácter.

Si estás en Windows (donde es más difícil), puedes hacer algo como esto (que no es portátil):

 #include  #include  #include  int main() { _setmode(_fileno(stdout), _O_U16TEXT); std::wcout << L"—"; } 

No hay soporte universal para Unicode en C ++ y en varios terminales, por lo que no habrá una solución portátil.

La cosa es que Windows usa páginas de códigos en la consola por defecto. Probablemente usa UTF-16 internamente, pero siempre se convertirá ay desde la página de códigos ANSI cuando interactúa con el exterior. Así que imprima un punto de código UTF-16 como std::wcout << wchar_t(0x2014); no funcionará

Si está utilizando Windows en inglés o en otros idiomas de Europa Occidental que utilizan la página de códigos 1252, puede imprimir el guión de emulación que se encuentra en el punto de código 151 simplemente con

 cout << (char)151; 

Si no funciona, entonces no estás en la página de códigos 1252. Puedes cambiarlo a 1252 si es posible o buscar em-dash en tu página de códigos (si está disponible)

De lo contrario, la solución más simple es cambiar a UTF-8 por chcp 65001 luego imprimir el carácter por

 wcout << L"—"; 

no siempre funcionará debido a la peor compatibilidad con Unicode en la consola de Windows. En muchos casos los personajes no aparecen, reemplazándolos por cuadrados o ???? pero simplemente copie el texto y péguelo en cualquier cuadro de texto Unicode, luego se mostrará correctamente

En Linux, las cosas son mucho más simples porque UTF-8 se utilizan de forma predeterminada. Así que puedes usar

 cout << "—";